http://item.taobao.com/item.htm?id=7949942367
http://sale.bangpai.taobao.com/site.php?m=tao_item&a=group&spid=1767&siid=9975
回忆未来(372647693) 19:04:21
^([0-9]{1,3}) 不行啊。
回忆未来(372647693) 19:04:33
匹配1到3次啊,有什么错咧?
Benny(76354595) 19:10:02
^[0-9]+
回忆未来(372647693) 19:12:49
为何是+,而不是匹配1-3次咧、
Benny(76354595) 19:14:14
貌似editplus不支持{1,3}这种
^([0-9]{1,3}) 不行啊。
回忆未来(372647693) 19:04:33
匹配1到3次啊,有什么错咧?
Benny(76354595) 19:10:02
^[0-9]+
回忆未来(372647693) 19:12:49
为何是+,而不是匹配1-3次咧、
Benny(76354595) 19:14:14
貌似editplus不支持{1,3}这种
php-filter过滤器- filter_input_array() 和如何正确运用PHP filter判断过滤数据。
Php/Js/Shell/Go jackxiang 2010-11-9 19:14
在PHP出现至今,一直在不断的更新版本,增加新的功能,供我们大家使用,满足我们的需求。PHP 5.2以及更高的版本,PHP filter被绑定于系统,它可以对数据进行自动的过滤和判断。
第一种、PHP filter判断一个变量的内容是否符合要求
使用函数filter_var,第一个参数是要判断的变量。第二个参数是判断的要求,FILTER_VALIDATE_EMAIL表示判断是否符合email格式。如果变量是类似’boy@163.com’的数据,系统就会完整的输出‘boy@163.com’。如果是错误的格式,比如’boy’,就会输出false。如果没有填写表单中的email字段,系统输出空字符串。
$email = ‘boy@163.com’;
echo filter_var($email,
FILTER_VALIDATE_EMAIL);
第二种、PHP filter根据要求过滤一个变量的内容
和上面唯一的不同是第二个参数使用FILTER_SANITIZE_EMAIL,输出的结果会不同。如果变量是类似’boy@163.com’的数据,系统就会完整的输出’boy@163.com’。如果是错误的格式,比如’boy-afds3′,只要是数字和字母和划线等email格式中可以出现的内容,系统同样会完整的输出’boy-afds3′。如果变量没有设置内容,系统输出空字符串。如果是’boy阿三’,系统会把email格式中不允许的东西去除,输出’boy’。
$email = ‘boy@163.com’;
echo filter_var($email,
FILTER_SANITIZE_EMAIL);
第三种、PHP filter判断输入的变量的内容是否符合要求
使用函数filter_input。第一个参数表示从那里获得的数据,INPUT_POST表示通过POST方法传递过来,还可以使用INPUT_GET, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV,代表相应的途径。第二个参数就是数据的名称。第三个参数代表过滤的要求,FILTER_VALIDATE_EMAIL表示判断数据是否符合email格式。
假设通过表单的POST过来的一个字段email。如果是类似’boy@163.com’的数据,系统就会完整的输出’boy@163.com’。如果是错误的格式,比如’boy’,就会输出false。如果没有填写表单中的email字段,系统输出null,也就是空。
echo filter_input(INPUT_POST,
‘email’, FILTER_VALIDATE_EMAIL);
第四种、PHP filter根据要求过滤输入的变量的内容
和上面唯一的不同是第二个参数使用FILTER_SANITIZE_EMAIL,输出的结果会不同。假设通过表单的POST过来的一个字段email。
如果是类似’boy@163.com’的数据,系统就会完整的输出’boy@163.com’。如果是错误的格式,比如’boy-afds3′,只要是数字和字母和划线等email格式中可以出现的内容,系统同样会完整的输出’boy-afds3′。如果没有填写表单中的email字段,系统输出null,也就是空。如果是’boy阿三’源码天空,系统会把email格式中不允许的东西去除,输出’boy’。
echo filter_input
(INPUT_POST, ‘email’,
FILTER_SANITIZE_EMAIL);
以上就是PHP filter的具体功能介绍,希望对又需要的朋友有所帮助。
来自:http://www.codesky.net/article/200912/140526.html
阅读全文
第一种、PHP filter判断一个变量的内容是否符合要求
使用函数filter_var,第一个参数是要判断的变量。第二个参数是判断的要求,FILTER_VALIDATE_EMAIL表示判断是否符合email格式。如果变量是类似’boy@163.com’的数据,系统就会完整的输出‘boy@163.com’。如果是错误的格式,比如’boy’,就会输出false。如果没有填写表单中的email字段,系统输出空字符串。
$email = ‘boy@163.com’;
echo filter_var($email,
FILTER_VALIDATE_EMAIL);
第二种、PHP filter根据要求过滤一个变量的内容
和上面唯一的不同是第二个参数使用FILTER_SANITIZE_EMAIL,输出的结果会不同。如果变量是类似’boy@163.com’的数据,系统就会完整的输出’boy@163.com’。如果是错误的格式,比如’boy-afds3′,只要是数字和字母和划线等email格式中可以出现的内容,系统同样会完整的输出’boy-afds3′。如果变量没有设置内容,系统输出空字符串。如果是’boy阿三’,系统会把email格式中不允许的东西去除,输出’boy’。
$email = ‘boy@163.com’;
echo filter_var($email,
FILTER_SANITIZE_EMAIL);
第三种、PHP filter判断输入的变量的内容是否符合要求
使用函数filter_input。第一个参数表示从那里获得的数据,INPUT_POST表示通过POST方法传递过来,还可以使用INPUT_GET, INPUT_COOKIE, INPUT_SERVER, INPUT_ENV,代表相应的途径。第二个参数就是数据的名称。第三个参数代表过滤的要求,FILTER_VALIDATE_EMAIL表示判断数据是否符合email格式。
假设通过表单的POST过来的一个字段email。如果是类似’boy@163.com’的数据,系统就会完整的输出’boy@163.com’。如果是错误的格式,比如’boy’,就会输出false。如果没有填写表单中的email字段,系统输出null,也就是空。
echo filter_input(INPUT_POST,
‘email’, FILTER_VALIDATE_EMAIL);
第四种、PHP filter根据要求过滤输入的变量的内容
和上面唯一的不同是第二个参数使用FILTER_SANITIZE_EMAIL,输出的结果会不同。假设通过表单的POST过来的一个字段email。
如果是类似’boy@163.com’的数据,系统就会完整的输出’boy@163.com’。如果是错误的格式,比如’boy-afds3′,只要是数字和字母和划线等email格式中可以出现的内容,系统同样会完整的输出’boy-afds3′。如果没有填写表单中的email字段,系统输出null,也就是空。如果是’boy阿三’源码天空,系统会把email格式中不允许的东西去除,输出’boy’。
echo filter_input
(INPUT_POST, ‘email’,
FILTER_SANITIZE_EMAIL);
以上就是PHP filter的具体功能介绍,希望对又需要的朋友有所帮助。
来自:http://www.codesky.net/article/200912/140526.html
阅读全文
用PHP的方法shell的awk方法把QQ号码后两位屏蔽为*的方法
Php/Js/Shell/Go jackxiang 2010-11-9 14:55
方法零,直接截取:
方法一,替换:
方法二,正则匹配:
php reg.php
Array
(
[0] => Array
(
[0] => 372647693
)
[1] => Array
(
[0] => 3726476
)
)
取array的下标1即是$out3[1][0]后,加上**,即可!
方法2:
php reg.php
3726476**
方法3:
php reg.php
3726476**
shell的awk方法实现:
方法一,替换:
方法二,正则匹配:
php reg.php
Array
(
[0] => Array
(
[0] => 372647693
)
[1] => Array
(
[0] => 3726476
)
)
取array的下标1即是$out3[1][0]后,加上**,即可!
方法2:
<?php
$st['FQQ']='372647693';
$parttern="/^(\d)(\d+)(\d{2})$/";
$replace="\$1$2**";
$qq=preg_replace($parttern,$replace,$st['FQQ']);
echo $qq;
?>
$st['FQQ']='372647693';
$parttern="/^(\d)(\d+)(\d{2})$/";
$replace="\$1$2**";
$qq=preg_replace($parttern,$replace,$st['FQQ']);
echo $qq;
?>
php reg.php
3726476**
方法3:
<?php
$qq="372647693";
$result = preg_replace('/^(.+).{2}$/', '\1**', $qq);
echo $result;
?>
$qq="372647693";
$result = preg_replace('/^(.+).{2}$/', '\1**', $qq);
echo $result;
?>
php reg.php
3726476**
shell的awk方法实现:
cat xyz_zizuan.txt |awk '{print substr($1,1,length($1)-2) "**"}' > xyz_zizuan2.txt
懒人必备
用tab来做补全, 这个插件会记住你最后一次的补全类型,并按此来做补全
这个插件比上次介绍的"简单而实用的vim script"好很多.
有效编辑的七个习惯里有一条就是:
Don't type it twice
所以能偷懒的时候,就尽量偷懒吧.
插件链接地址:
http://www.vim.org/scripts/script.php?script_id=182
http://www.vim.org/scripts/script.php?script_id=1643
1.下载:http://www.vim.org/scripts/script.php?script_id=1643
2 解压:把supertab.vim 文件丢到 /usr/share/vim/vim70/plugin 文件夹就好了
3 帮助:supertab.vim 文件头部, 和命令 ":SuperTabHelp"
4 使用:
在上面一节中你应该学会了自动补全代码的功能, 按下"Ctrl+X Ctrl+O"就搞定了, 如果你够懒的话肯定会说"这么麻烦啊,
居然要按四个键", 不必为此自责, 因为Gergely Kontra 和 Eric Van Dewoestine也跟你差不多, 只不过人家开发了supertab.vim这个插件, 可以永远懒下去了, 下面我来教你偷懒吧.
在你的~/.vimrc文件中加上这两句:
let g:SuperTabRetainCompletionType=2
let g:SuperTabDefaultCompletionType="<C-X><C-O>"
以后当你准备按"Ctrl+X Ctrl+O"的时候直接按<Tab>就好了, 够爽吧 ....
我稍微再介绍一下上面那两句配置信息:
let g:SuperTabDefaultCompletionType="<C-X><C-O>"
" 设置按下<Tab>后默认的补全方式, 默认是<C-P>,
" 现在改为<C-X><C-O>. 关于<C-P>的补全方式,
" 还有其他的补全方式, 你可以看看下面的一些帮助:
" :help ins-completion
" :help compl-omni
let g:SuperTabRetainCompletionType=2
" 0 - 不记录上次的补全方式
" 1 - 记住上次的补全方式,直到用其他的补全命令改变它
" 2 - 记住上次的补全方式,直到按ESC退出插入模式为止
用tab来做补全, 这个插件会记住你最后一次的补全类型,并按此来做补全
这个插件比上次介绍的"简单而实用的vim script"好很多.
有效编辑的七个习惯里有一条就是:
Don't type it twice
所以能偷懒的时候,就尽量偷懒吧.
插件链接地址:
http://www.vim.org/scripts/script.php?script_id=182
http://www.vim.org/scripts/script.php?script_id=1643
1.下载:http://www.vim.org/scripts/script.php?script_id=1643
2 解压:把supertab.vim 文件丢到 /usr/share/vim/vim70/plugin 文件夹就好了
3 帮助:supertab.vim 文件头部, 和命令 ":SuperTabHelp"
4 使用:
在上面一节中你应该学会了自动补全代码的功能, 按下"Ctrl+X Ctrl+O"就搞定了, 如果你够懒的话肯定会说"这么麻烦啊,
居然要按四个键", 不必为此自责, 因为Gergely Kontra 和 Eric Van Dewoestine也跟你差不多, 只不过人家开发了supertab.vim这个插件, 可以永远懒下去了, 下面我来教你偷懒吧.
在你的~/.vimrc文件中加上这两句:
let g:SuperTabRetainCompletionType=2
let g:SuperTabDefaultCompletionType="<C-X><C-O>"
以后当你准备按"Ctrl+X Ctrl+O"的时候直接按<Tab>就好了, 够爽吧 ....
我稍微再介绍一下上面那两句配置信息:
let g:SuperTabDefaultCompletionType="<C-X><C-O>"
" 设置按下<Tab>后默认的补全方式, 默认是<C-P>,
" 现在改为<C-X><C-O>. 关于<C-P>的补全方式,
" 还有其他的补全方式, 你可以看看下面的一些帮助:
" :help ins-completion
" :help compl-omni
let g:SuperTabRetainCompletionType=2
" 0 - 不记录上次的补全方式
" 1 - 记住上次的补全方式,直到用其他的补全命令改变它
" 2 - 记住上次的补全方式,直到按ESC退出插入模式为止
ctrl+s是一个古老的shell控制键,在输入ctrl+q就可以恢复了
CTRL-S and CTRL-Q are called flow-control characters. They represent an antiquated way of stopping and restarting the flow of output from one device to another (e.g., from the computer to your terminal) that was useful when the speed of such output was low. They are rather obsolete in these days of high-speed networks. In fact, under the latter conditions, CTRL-S and CTRL-Q are basically a nuisance. The only thing you really need to know about them is that if your screen output becomes “stuck,” then you may have hit CTRL-S by accident. Type CTRL-Q to restart the output; any keys you may have hit in between will then take effect.
ctrl+s是一个古老的shell控制键,在输入ctrl+q就可以恢复了
CTRL-S and CTRL-Q are called flow-control characters. They represent an antiquated way of stopping and restarting the flow of output from one device to another (e.g., from the computer to your terminal) that was useful when the speed of such output was low. They are rather obsolete in these days of high-speed networks. In fact, under the latter conditions, CTRL-S and CTRL-Q are basically a nuisance. The only thing you really need to know about them is that if your screen output becomes “stuck,” then you may have hit CTRL-S by accident. Type CTRL-Q to restart the output; any keys you may have hit in between will then take effect.
ctrl+s是一个古老的shell控制键,在输入ctrl+q就可以恢复了
来自:http://cn.voidcc.com/question/p-rjdaikmm-ra.html
ASCII编码是计算机所能显示字符的编码,它的取值范围是0-255,其中包括标点、字母、数字、汉字等。在编程过程中,经常把指定的字符转化为ASCII码进行比较。
cat a.php
输出:9 就是ASCII码的:09 水平定位符号
ASCII码表:http://ascii.911cha.com/?year=09
php a.php
最后,发现用终端复制就行,用vscode就不行,经下面这段代码测试,发现是终端可以输出\n这种不可见字符,而vscode在复制时这个没了,于是word就会出现错乱。
直接终端复制就可以。
也可php aaaa.php|pbcopy
即使不加换行\n,也能正常粘贴到表格里。
php aaaa.php|pbcopy #证明pbcopy 会在行尾加换行。
下面是PHP提供的转换ASCII码和字符的函数。
1.chr()函数
该函数用于将ASCII码值转化为字符串。其函数声明如下:
string chr (int ascii);
2.ord()函数
该函数用于将字符串转化为ASCII码值。其函数声明如下:
int ord(string str);
示例:
使用chr()函数和ord()函数进行字符串与ASCII码之间的转换,程序代码如下:
<?php
$str1=chr(88);
echo $str1; //返回值为X
echo "t";
$str2=ord('S');
echo $str2; //返回值为83
?>
中文字符截取$str1=chr(88);
echo $str1; //返回值为X
echo "t";
$str2=ord('S');
echo $str2; //返回值为83
?>
ord() chr() int() intval() 的区别
ord()->本函数返回字符的 ASCII (美国国家标准交换码) 序数值。本函数和 chr() 函数相反
php chr() ord()中文截取乱码问题解决方法
<?php
$lenth = 19;
$str = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?";
echo strlen($str)<=$lenth ? $str : (substr($str,0,$lenth).chr(0)."....");
?>
$lenth = 19;
$str = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?";
echo strlen($str)<=$lenth ? $str : (substr($str,0,$lenth).chr(0)."....");
?>
<?
/*
@ 另一种方法,使用ord()函数:
@ 适用于 gb2312 编码:
*/
$str = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?";
function gb2312_substr($str, $limit) {
$restr ='';
for($i=0;$i< $limit-3;$i++) {
$restr .= ord($str[$i])>127 ? $str[$i].$str[++$i] : $str[$i];
}
return $restr;
}
/*
@ 以下仅适用于 utf-8 编码;
*/
function utf8_substr($str, $limit) {
$restr = '';
for($i=0;$i< $limit-3;$i++) {
$restr .= ord($str[$i])>127 ? $str[$i].$str[++$i].$str[++$i] : $str[$i];
}
return $restr;
}
/*
@ 另一种方法,使用ord()函数:
@ 适用于 gb2312 编码:
*/
$str = "怎么将新闻的很长的标题只显示前面一些字,后面用.....来代替?";
function gb2312_substr($str, $limit) {
$restr ='';
for($i=0;$i< $limit-3;$i++) {
$restr .= ord($str[$i])>127 ? $str[$i].$str[++$i] : $str[$i];
}
return $restr;
}
/*
@ 以下仅适用于 utf-8 编码;
*/
function utf8_substr($str, $limit) {
$restr = '';
for($i=0;$i< $limit-3;$i++) {
$restr .= ord($str[$i])>127 ? $str[$i].$str[++$i].$str[++$i] : $str[$i];
}
return $restr;
}
另外一种方法:
/**
* 截取UTF-8编码下字符串的函数
*
* @access public
* @param string $str 被截取的字符串
* @param int $start 截取的起始位置
* @param int $length 截取的长度
* @param bool $append 是否附加省略号
* @return null
*/
function sub_str($str, $start=0, $length=0, $append=true)
{
$str = trim($str);
$reval = '';
if (0 == $length)
{
$length = strlen($str);
}
elseif (0 > $length)
{
$length = strlen($str) + $length;
}
if (strlen($str) <= $length) return $str;
for($i = 0; $i < $length; $i++)
{
if (!isset($str[$i])) break;
if (196 <= ord($str[$i]))
{
$i += 2 ;
$start += 2;
}
}
if ($i >= $start) $reval = substr($str, 0, $i);
if ($i < strlen($str) && $append) $reval .= "...";
return $reval;
}
//解释下上面第一个:chr(0)不是null,null是什么都没有,而chr(0)的值是0。表示成16进制是0x00,表示成二进制是00000000虽然chr(0)不会显示出什么,但是他是一个字符。虽然chr(0)不会显示出什么,但是他是一个字符。当汉字被截断时,根据编码规则他总是要把后边的其他字符拉过来一起作为汉字解释,这就是出现乱码的原因。 * 截取UTF-8编码下字符串的函数
*
* @access public
* @param string $str 被截取的字符串
* @param int $start 截取的起始位置
* @param int $length 截取的长度
* @param bool $append 是否附加省略号
* @return null
*/
function sub_str($str, $start=0, $length=0, $append=true)
{
$str = trim($str);
$reval = '';
if (0 == $length)
{
$length = strlen($str);
}
elseif (0 > $length)
{
$length = strlen($str) + $length;
}
if (strlen($str) <= $length) return $str;
for($i = 0; $i < $length; $i++)
{
if (!isset($str[$i])) break;
if (196 <= ord($str[$i]))
{
$i += 2 ;
$start += 2;
}
}
if ($i >= $start) $reval = substr($str, 0, $i);
if ($i < strlen($str) && $append) $reval .= "...";
return $reval;
}
?>
ord.php:
[/code]
<?php
$a = chr(0);
printf("0x%x",$a);
?>
$a = chr(0);
printf("0x%x",$a);
?>
# php ord.php
0x0
来源:http://www.freesear.com/read.php?tid=4461
腾讯,深圳总部。这是失眠的夜晚。
阅读全文
阅读全文
这段:
就是登陆框里面显示的默认配置!
后面就是打开 libraries 目录下的 config.default.php 文件,依次找到下面各项,按照说明配置即可。
展示登录框的方法:
今天研究了一下phpmyadmin,想让它有个登录!在网上找了一下,自己写出来为了以后方便!
登录phpmyadmin时验证用户权限
首先进入phpmyadmin的根目录,找到libraries目录,打开config.default.php文件,
vi /usr/local/apache2/htdocs/phpMyAdmin/config.inc.php
将$cfg['Servers'][$i]['auth_type'] = 'config';
改成
$cfg['Servers'][$i]['auth_type'] = 'http';
ok!就这么简单!登录试一下!
auth/cookie.auth.lib.php
if ($GLOBALS['cfg']['LoginCookieRecall']) {
$default_user = $GLOBALS['PHP_AUTH_USER'];
$default_server = $GLOBALS['pma_auth_server'];
$autocomplete = '';
} else {
$default_user = 'kary';
$default_server = '127.0.0.1:3306';
// skip the IE autocomplete feature.
$autocomplete = ' autocomplete="off"';
}
$default_user = $GLOBALS['PHP_AUTH_USER'];
$default_server = $GLOBALS['pma_auth_server'];
$autocomplete = '';
} else {
$default_user = 'kary';
$default_server = '127.0.0.1:3306';
// skip the IE autocomplete feature.
$autocomplete = ' autocomplete="off"';
}
就是登陆框里面显示的默认配置!
后面就是打开 libraries 目录下的 config.default.php 文件,依次找到下面各项,按照说明配置即可。
展示登录框的方法:
今天研究了一下phpmyadmin,想让它有个登录!在网上找了一下,自己写出来为了以后方便!
登录phpmyadmin时验证用户权限
首先进入phpmyadmin的根目录,找到libraries目录,打开config.default.php文件,
vi /usr/local/apache2/htdocs/phpMyAdmin/config.inc.php
将$cfg['Servers'][$i]['auth_type'] = 'config';
改成
$cfg['Servers'][$i]['auth_type'] = 'http';
ok!就这么简单!登录试一下!
g++ -Wall 启用所有警告信息
g++ -w 禁用所有警告信息
g++ -Werror 在发生警告时取消编译操作
其他注意大小写:
-E 预处理后即停止,不进行编译,汇编及链接
-S 编译后即停止,不进行汇编及连接
-c 编译或汇编源文件,但不进行连接
-o 指定输出文件为file
默认是连接基本库: /usr/lib/libc.so
math.h需要的库: /usr/lib/libm.so
除非显示的制定,对于math.h没法找到那个libm.so
gcc example /usr/lib/libm.so 就可以编译通过咧。
gcc -x c++ //指定语言
static 选项强制使用静态库。
-g:获得有关调试信息,不能和常见优化如:-O1 -O2,-O3等共同使用。
g++ -w 禁用所有警告信息
g++ -Werror 在发生警告时取消编译操作
其他注意大小写:
-E 预处理后即停止,不进行编译,汇编及链接
-S 编译后即停止,不进行汇编及连接
-c 编译或汇编源文件,但不进行连接
-o 指定输出文件为file
默认是连接基本库: /usr/lib/libc.so
math.h需要的库: /usr/lib/libm.so
除非显示的制定,对于math.h没法找到那个libm.so
gcc example /usr/lib/libm.so 就可以编译通过咧。
gcc -x c++ //指定语言
static 选项强制使用静态库。
-g:获得有关调试信息,不能和常见优化如:-O1 -O2,-O3等共同使用。
背景:有时PHP在操作memcache时会出现set后删除不了疑问题(匪夷所思),需要用shell下对memcache进行调试,这样操作相对方便些。
flush_all 全清:
flush_all
注:flush并不会将items删除,只是将所有的items标记为expired,因此这时memcache依旧占用所有内存。
用status查看其确实还占用内存。
stats
STAT total_items 18375
shell下的使用方法:
先set 几个
[root@host5-7 ~]# telnet 192.168.5.21 19867
Trying 192.168.5.21...
Connected to 192.168.5.21 (192.168.5.21).
Escape character is '^]'.
set test1 0 0 3
123
STORED
set test2 0 0 3
345
STORED
set test3 0 0 3
567
STORED
set test4 0 0 3
789
STORED
quit
Connection closed by foreign host.
实践如下:
添加,删除,修改示例:
telnet 192.168.1.100 11211
add name 0 60 5 [说明 add 是指令名 name 是key的名字 (是以key/value存放), 0 标志, 60 表示数据存放 60s 5表示 放入多大数据 ], 如果一个key已经存在,再放入是失败的.
get name [获取 name的值]
//更新
set name 0 60 5 [如果 name 这个key存在,就是更新, 如果key不存在,就是添加]
//删除
delete key值
本质shell的telnet 的Memcache通讯返回,如下:
Escape character is '^]'.
STAT pid 13574
STAT uptime 8897547
根据这个原理写了监控Memcache的shell如下:
这是通过重定向,实现socket通讯中,发送然后获取返回的例子。其实,上面代码看似一次只能发送一段。时间上。我们可以反复调用:sendmsg ,捕捉输出数据。实现连续的,读与写操作。
阅读全文
flush_all 全清:
flush_all
注:flush并不会将items删除,只是将所有的items标记为expired,因此这时memcache依旧占用所有内存。
用status查看其确实还占用内存。
stats
STAT total_items 18375
shell下的使用方法:
先set 几个
[root@host5-7 ~]# telnet 192.168.5.21 19867
Trying 192.168.5.21...
Connected to 192.168.5.21 (192.168.5.21).
Escape character is '^]'.
set test1 0 0 3
123
STORED
set test2 0 0 3
345
STORED
set test3 0 0 3
567
STORED
set test4 0 0 3
789
STORED
quit
Connection closed by foreign host.
实践如下:
添加,删除,修改示例:
telnet 192.168.1.100 11211
add name 0 60 5 [说明 add 是指令名 name 是key的名字 (是以key/value存放), 0 标志, 60 表示数据存放 60s 5表示 放入多大数据 ], 如果一个key已经存在,再放入是失败的.
get name [获取 name的值]
//更新
set name 0 60 5 [如果 name 这个key存在,就是更新, 如果key不存在,就是添加]
//删除
delete key值
本质shell的telnet 的Memcache通讯返回,如下:
(echo "stats";sleep 2)|telnet 172.*.*.* 12000
Escape character is '^]'.
STAT pid 13574
STAT uptime 8897547
根据这个原理写了监控Memcache的shell如下:
#!/bin/sh
#通过传入ip 以及端口,发送指令获得返回数据
#copyright chengmo qq:8292669
#函数往往放到最上面
function sendmsg()
{
msg=$1;
echo "$1">&8;
getout;
}
#向socket通道发送指令,并且调用获得返回参数
function getout()
{
#read 命令 -u 从打开文件描述符 8 读取数据,-d读取数据忽略掉:\r换行符
while read -u 8 -d $'\r' name;
do
if [ "${name}" == "END" -o "${name}" == "ERROR" ];then
break;
fi;
echo $name;
done
}
#由于:memcached每次通讯完毕,会返回:END或者ERROR(出错),通过判断是否是"END"觉得读取是不是结束,否则循环不会停止
if [ $# -lt 2 ];then
echo "usage:$0 host port [command]";
exit 1;
fi;
[[ $# -gt 2 ]]&&command=$3;
#设置默认值 如果command为定义则为:stats
command="${command=stats}";
host="$1";
port="$2";
exec 8<>/dev/tcp/${host}/${port};
#打开通向通道是8
if [ "$?" != "0" ];then
echo "open $host $port fail!";
exit 1;
fi
sendmsg "$command";
#发送指定命令
sendmsg "quit";
#发送退出通向命令
exec 8<&-;
exec 8>&-;
#关闭socket通道
exit 0;
#通过传入ip 以及端口,发送指令获得返回数据
#copyright chengmo qq:8292669
#函数往往放到最上面
function sendmsg()
{
msg=$1;
echo "$1">&8;
getout;
}
#向socket通道发送指令,并且调用获得返回参数
function getout()
{
#read 命令 -u 从打开文件描述符 8 读取数据,-d读取数据忽略掉:\r换行符
while read -u 8 -d $'\r' name;
do
if [ "${name}" == "END" -o "${name}" == "ERROR" ];then
break;
fi;
echo $name;
done
}
#由于:memcached每次通讯完毕,会返回:END或者ERROR(出错),通过判断是否是"END"觉得读取是不是结束,否则循环不会停止
if [ $# -lt 2 ];then
echo "usage:$0 host port [command]";
exit 1;
fi;
[[ $# -gt 2 ]]&&command=$3;
#设置默认值 如果command为定义则为:stats
command="${command=stats}";
host="$1";
port="$2";
exec 8<>/dev/tcp/${host}/${port};
#打开通向通道是8
if [ "$?" != "0" ];then
echo "open $host $port fail!";
exit 1;
fi
sendmsg "$command";
#发送指定命令
sendmsg "quit";
#发送退出通向命令
exec 8<&-;
exec 8>&-;
#关闭socket通道
exit 0;
这是通过重定向,实现socket通讯中,发送然后获取返回的例子。其实,上面代码看似一次只能发送一段。时间上。我们可以反复调用:sendmsg ,捕捉输出数据。实现连续的,读与写操作。
阅读全文
零、使用系统的 $RANDOM 变量
echo $RANDOM
17617
$RANDOM 的范围是 [0, 32767]
如需要生成超过32767的随机数,可以用以下方法实现。
一、通过时间获得随机数(date)
这个也是我们经常用到的,可以说时间是唯一的,也不会重复的,从这个里面获得同一时间的唯一值。适应所有程序里面了。
例子:
[chengmo@centos5 shell]$ date +%s
1287764773
#获得时间戳,当前到:1970-01-01 00:00:00 相隔的秒数
#如果用它做随机数,相同一秒的数据是一样的。在做循环处理,多线程里面基本不能满足要求了。
[chengmo@centos5 shell]$ date +%N
738710457
#获得当前时间的纳秒数据,精确到亿分之一秒。
#这个相当精确了,就算在多cpu,大量循环里面,同一秒里面,也很难出现相同结果,不过不同时间里面还会有大量重复碰撞
[chengmo@centos5 shell]$ date +%s%N
1287764807051101270
#这个可以说比较完美了,加入了时间戳,又加上了纳秒
通过上面说明,用它来做随机数的基数了,接下来我们看怎么样获得一段数据内怎么样获得随机数。
#!/bin/sh
#写个随机函数,调用方法random min max
#在min 与 max直接获得随机整数
#copyright chengmo QQ:8292669
#获得随机数返回值,shell函数里算出随机数后,更新该值
看看运行结果:
[chengmo@centos5 shell]$ sh testrandom.sh
1,2-10000,5600
2,2-10000,5295
3,2-10000,3432
4,2-10000,3148
5,2-10000,9041
6,2-10000,4290
7,2-10000,2380
8,2-10000,9009
9,2-10000,5474
10,2-10000,3664
一个循环里面,得到值各不相同。
这个是我们常用方法,适应各种语言,是一个通用算法,就算服务器不提供,某时刻相同唯一数据标记,我们也可以通过这种方法,做自己的伪随机数。
来源:http://www.cnblogs.com/chengmo/archive/2010/10/23/1858879.html
More: http://blog.csdn.net/fdipzone/article/details/24329523
echo $RANDOM
17617
$RANDOM 的范围是 [0, 32767]
如需要生成超过32767的随机数,可以用以下方法实现。
一、通过时间获得随机数(date)
这个也是我们经常用到的,可以说时间是唯一的,也不会重复的,从这个里面获得同一时间的唯一值。适应所有程序里面了。
例子:
[chengmo@centos5 shell]$ date +%s
1287764773
#获得时间戳,当前到:1970-01-01 00:00:00 相隔的秒数
#如果用它做随机数,相同一秒的数据是一样的。在做循环处理,多线程里面基本不能满足要求了。
[chengmo@centos5 shell]$ date +%N
738710457
#获得当前时间的纳秒数据,精确到亿分之一秒。
#这个相当精确了,就算在多cpu,大量循环里面,同一秒里面,也很难出现相同结果,不过不同时间里面还会有大量重复碰撞
[chengmo@centos5 shell]$ date +%s%N
1287764807051101270
#这个可以说比较完美了,加入了时间戳,又加上了纳秒
通过上面说明,用它来做随机数的基数了,接下来我们看怎么样获得一段数据内怎么样获得随机数。
#!/bin/sh
#写个随机函数,调用方法random min max
#在min 与 max直接获得随机整数
#copyright chengmo QQ:8292669
#获得随机数返回值,shell函数里算出随机数后,更新该值
function random()
{
min=$1;
max=$2-$1;
num=$(date +%s+%N);
((retnum=num%max+min));
#进行求余数运算即可
echo $retnum;
#这里通过echo 打印出来值,然后获得函数的,stdout就可以获得值
#还有一种返回,定义全价变量,然后函数改下内容,外面读取
}
#得到1-10的seq数据项
for i in {1..10};
do
out=$(random 2 10000);
echo $i,"2-10000",$out;
done;
{
min=$1;
max=$2-$1;
num=$(date +%s+%N);
((retnum=num%max+min));
#进行求余数运算即可
echo $retnum;
#这里通过echo 打印出来值,然后获得函数的,stdout就可以获得值
#还有一种返回,定义全价变量,然后函数改下内容,外面读取
}
#得到1-10的seq数据项
for i in {1..10};
do
out=$(random 2 10000);
echo $i,"2-10000",$out;
done;
看看运行结果:
[chengmo@centos5 shell]$ sh testrandom.sh
1,2-10000,5600
2,2-10000,5295
3,2-10000,3432
4,2-10000,3148
5,2-10000,9041
6,2-10000,4290
7,2-10000,2380
8,2-10000,9009
9,2-10000,5474
10,2-10000,3664
一个循环里面,得到值各不相同。
这个是我们常用方法,适应各种语言,是一个通用算法,就算服务器不提供,某时刻相同唯一数据标记,我们也可以通过这种方法,做自己的伪随机数。
来源:http://www.cnblogs.com/chengmo/archive/2010/10/23/1858879.html
More: http://blog.csdn.net/fdipzone/article/details/24329523
先上示例Demo:
awk中Match的用法test:
Hello
Welcom
What
Why
jackxiang
取得每行的大写字母:
H
W
W
W
RSTART 被匹配函数匹配的字符串首
RLENGTH 被匹配函数匹配的字符串长度
确实加LANG=C 就OK了...
GNU Awk 3.1.5
Copyright (C) 1989, 1991-2005 Free Software Foundation.
务必参考:http://www.cnblogs.com/chengmo/archive/2010/10/06/1844818.html
du -lh|awk '{if(match($1,"G") != 0) print$0}'
awk中Match的用法test:
Hello
Welcom
What
Why
jackxiang
取得每行的大写字母:
LANG=C awk ' { if(match($0,/[A-Z]+/)) print substr($0,RSTART,RLENGTH)}' test
H
W
W
W
RSTART 被匹配函数匹配的字符串首
RLENGTH 被匹配函数匹配的字符串长度
确实加LANG=C 就OK了...
awk --version
GNU Awk 3.1.5
Copyright (C) 1989, 1991-2005 Free Software Foundation.
务必参考:http://www.cnblogs.com/chengmo/archive/2010/10/06/1844818.html
cat text.txt | xargs echo -n
awk '{{printf"%s",$0}}' awkF.txt
sed去掉换行:
sed ':a;N;s/\n//;ta' awkF.txt
sed ':a;$!N;s/\n//;ta' awkF.txt
awk '{a[NR]=$0}END{for(i=1;i<=NR;i++)if(i==NR) print a[i];else printf a[i]}' awkF.txt
各级政府将大量的人力物力财力用于维稳,但社会矛盾和社会冲突的数量非但没减,反而不断增加,这种现象忽然就联想起量子物理的“测不准”原理:人不可能同时准确测量一个粒子的动能和势能,对动能的测量会影响到势能,反之亦然。社会冲突背后是利益表达机制的缺失,如果谁表达了就想普朗克定义了普朗克常量,像麦克斯韦写出了波动方程,表达了波的波粒二象性来表达电磁波一样.
在一个核心价值明确,并且确实起作用的社会中,日常生活与政治生活是有机地交叠在一起的。例如,正派的道德习俗与民主政治有着不可忽视的关系,以人的自由意志为前提的诚实、信用、宽容、理性、关爱,都是具有政治意义的个人品质。因此,公民“自由”和政治“民主”很自然地一起成为核心价值。在日常生活中,人们常常把价值称之为“习俗道德”,而在政治生活中,则把价值称之为“政治规范”。这二者的区别在于:“习俗道德”往往是不成文的规范,而“政治规范”则是成文的原则,记载于大多数公民都熟悉的政治文献之中。在许多国家里,从小学和初中开始,这些政治文献就反复出现在教科书里,成为青少年公民教育的材料。
凡是“价值”,必须有一个“价值概念”和一个“原则表述”,这是学生在学校里学习基本写作时,老师就会告诉他们的。例如,“平等”是一个价值观念,对于它,人们可以作出不同的相关原则表述,可以表述为“人与人不可能平等”(因此男尊女卑、官贵民贱),也可以表述为“人人平等”(所有的人,不分男女、种族、职位高下,在人权、人格尊严、公民权利、法律待遇上,都一律平等)。
对于任何一个现代国家来说,都是先有“习俗道德”,再有“政治规范”的。传统总是在政治制度之先建立的。“习俗道德”是一种关于“好生活”和“好社会”的价值观,一种将人与人凝聚到一起的集体价值纽带。正如凯克斯(JohnKekes)所说,“好社会有凝聚力,能长治久安,主要是因为社会成员在如何相互对待,什么样的生活算得上好,什么是利,什么是害等问题上有相当的共识。这种共识的基础就是共同价值和体现共同价值的道德习俗”。
如果说“不成文”是习俗价值的特征,那么“成文”便是政治价值的特点。在现代国家里,成文的政治规范不仅书写成宪法、法律、法规,而且还保存在重要的历史文献、典籍之中。这些都是以“文本”的形式,一代代保留、传承下来的。学习、了解与核心价值有关的“政治规则”是每个国民从小开始公民教育的一部分,其途径之一便是学习一些这样的基本“文本”。
例如,在美国的初中教科书中,必定要学习的政治文献是《独立宣言》和《宪法》,这两部文献的价值表述都具有前面已经提到的两个特点:价值概念和价值原则表述。《独立宣言》一开头就说:“我们认为下面这些真理是不言而喻的:人人生而平等,造物者赋予他们若干不可剥夺的权利,其中包括生命权、自由权和追求幸福的权利”。在这里,“平等”是一个价值观念,而关于“平等”的原则表述则是“人人生而平等”。
美国的初中教科书中还有一些别的历史文献的全文或摘选,都在简短的导读中向学生介绍其历史背景和核心价值意义。这些文献有的是英国的,因为美国最早的殖民地人民就是英国移民。这些价值构成了美国人心目中的“好生活”。例如,1215年的英国《大宪章》:“这个文献说,国王和其他公民一样,必须服从法律”(价值是“法治”);1639年的《康涅狄格州的基本法规》,这是美洲殖民地的第一部宪法(法治);1689年“光荣革命”的《英国权利法案》(议会权力高于国王权力);1777年由杰弗逊起草的《维吉尼亚州的宗教自由法令》(宗教自由);乔治·梅森的《对政府宪法的反对意见》,对美国宪法中允许蓄奴表示反对(自由、平等);1796年的《华盛顿的辞职演说》(政治家的荣誉心,反对政党宗派,反对终身专权);1801年杰弗逊的《就职演说》:“美国的光荣不在它的霸权,而在它的自由”(自由);1823年的《门罗宣言》(和平);1848年的《塞尼卡福尔斯感伤宣言与决议》,第一个主张男女平等的权利的宣言(平等、权利);1863年的《废奴宣言》(平等、权利);1863年的林肯《葛底斯堡演说》,重申美国的共和理想;1865年的林肯《第二次就职演说》(和平、统一),1876年的《妇女解放宣言》(平等、权利),当然还有马丁·路德·金博士的《我有一个梦》等等。
说到核心价值,有人以为就是做理论文章,讲高深学理,事实并非如此。核心价值其实很平常,也很具体,体现在普通人的日常生活方式之中,渗透在他们的待人处世和公共政治行为之中。正因为平常,核心价值才成为普通人的公共生活常识,成为所有少年学生都可以在公民教育课程中习的基本知识。
凡是“价值”,必须有一个“价值概念”和一个“原则表述”,这是学生在学校里学习基本写作时,老师就会告诉他们的。例如,“平等”是一个价值观念,对于它,人们可以作出不同的相关原则表述,可以表述为“人与人不可能平等”(因此男尊女卑、官贵民贱),也可以表述为“人人平等”(所有的人,不分男女、种族、职位高下,在人权、人格尊严、公民权利、法律待遇上,都一律平等)。
对于任何一个现代国家来说,都是先有“习俗道德”,再有“政治规范”的。传统总是在政治制度之先建立的。“习俗道德”是一种关于“好生活”和“好社会”的价值观,一种将人与人凝聚到一起的集体价值纽带。正如凯克斯(JohnKekes)所说,“好社会有凝聚力,能长治久安,主要是因为社会成员在如何相互对待,什么样的生活算得上好,什么是利,什么是害等问题上有相当的共识。这种共识的基础就是共同价值和体现共同价值的道德习俗”。
如果说“不成文”是习俗价值的特征,那么“成文”便是政治价值的特点。在现代国家里,成文的政治规范不仅书写成宪法、法律、法规,而且还保存在重要的历史文献、典籍之中。这些都是以“文本”的形式,一代代保留、传承下来的。学习、了解与核心价值有关的“政治规则”是每个国民从小开始公民教育的一部分,其途径之一便是学习一些这样的基本“文本”。
例如,在美国的初中教科书中,必定要学习的政治文献是《独立宣言》和《宪法》,这两部文献的价值表述都具有前面已经提到的两个特点:价值概念和价值原则表述。《独立宣言》一开头就说:“我们认为下面这些真理是不言而喻的:人人生而平等,造物者赋予他们若干不可剥夺的权利,其中包括生命权、自由权和追求幸福的权利”。在这里,“平等”是一个价值观念,而关于“平等”的原则表述则是“人人生而平等”。
美国的初中教科书中还有一些别的历史文献的全文或摘选,都在简短的导读中向学生介绍其历史背景和核心价值意义。这些文献有的是英国的,因为美国最早的殖民地人民就是英国移民。这些价值构成了美国人心目中的“好生活”。例如,1215年的英国《大宪章》:“这个文献说,国王和其他公民一样,必须服从法律”(价值是“法治”);1639年的《康涅狄格州的基本法规》,这是美洲殖民地的第一部宪法(法治);1689年“光荣革命”的《英国权利法案》(议会权力高于国王权力);1777年由杰弗逊起草的《维吉尼亚州的宗教自由法令》(宗教自由);乔治·梅森的《对政府宪法的反对意见》,对美国宪法中允许蓄奴表示反对(自由、平等);1796年的《华盛顿的辞职演说》(政治家的荣誉心,反对政党宗派,反对终身专权);1801年杰弗逊的《就职演说》:“美国的光荣不在它的霸权,而在它的自由”(自由);1823年的《门罗宣言》(和平);1848年的《塞尼卡福尔斯感伤宣言与决议》,第一个主张男女平等的权利的宣言(平等、权利);1863年的《废奴宣言》(平等、权利);1863年的林肯《葛底斯堡演说》,重申美国的共和理想;1865年的林肯《第二次就职演说》(和平、统一),1876年的《妇女解放宣言》(平等、权利),当然还有马丁·路德·金博士的《我有一个梦》等等。
说到核心价值,有人以为就是做理论文章,讲高深学理,事实并非如此。核心价值其实很平常,也很具体,体现在普通人的日常生活方式之中,渗透在他们的待人处世和公共政治行为之中。正因为平常,核心价值才成为普通人的公共生活常识,成为所有少年学生都可以在公民教育课程中习的基本知识。