还是用perl来替换sed\grep吧

为了这个问题我折腾了一晚上。

事情是这样的,由于使用了mycat,所有多表联合查询在我们的数据库里都是没用的。

为了实现 select * from xxx where xxx in(1,2,3)这样的效果,我必须想办法把前一个查询的结果存为一个linux变量,由于我不知道怎样格式化查询结果,就想到用grep sed之类的工具来做。但是很可惜,sed支持的正则语法是令人无语的,还是perl最强大。

于是我开始各种搜索,但一切的说明都在讲怎样处理文件,最后还是IBM靠谱,虽然如下文章更像是机器翻译的结果,但解决了别人不说的大问题。

http://www.ibm.com/developerworks/cn/linux/sdk/perl/l-p101/index.html

总之就是Perl是可以接受管道命令作为输入的。

[heyuheng@pos-log ~]$ aa=’5 4 3 2′
[heyuheng@pos-log ~]$ echo $aa|perl -pe ‘s/\s/,/g’
5,4,3,2,[heyuheng@pos-log ~]$

 

 

这件事非常蛋疼。

当我写完一个类似 dd=”select * from xx where aa in(`echo $cc`)”的语句后,发现再echo $dd时,星号被替换成了当前目录下的文件列表!

我用set命令查看变量的时候,却发现值中的星号还是星号。

后来上网一查,原来echo时要避免这种情况必须在变量上套上引号,也就是echo “$dd”这种写法不会出问题。

17/12/10

补充一个s///操作符的说明。

正则表达式在Linux各命令中的区别

正则表达式虽好,但是不同环境不同工具对它的支持差异还是挺大的。
找了一个列表,方便速查。

grep 2.5.1 egrep 2.5.1 sed 3.02
sed 4.07
awk 3.1.1 perl 5.8.0 vim 6.1 JavaScript ??
转义 \ \ \ \ \ \ \
行头 ^ ^ ^ ^ ^ ^ ^
行尾 $ $ $ $ $ $ $
n个 {n} {m,n} {m,} {,n} \{n\} {n} \{n\} {n}或\{n\} 仅定义 –posix 或 –re-interval有效(要表达}和{,得用\\{和\\} 没有定义–posix或–re-interval时,不能用{n}的语法, \}\{和}{同义 {n} \{n\} {n}
{0,} * * * *或\*, (要表达*,得用\\*) * * *
{1,} \+ + \+ +或\+, (要表达+, 得用\\+) + \+ +
{0,1} \? ? \? ?或\?, (要表达?, 得用\\?) ? \? ?
任意字符 . . . . 含\n. . /s修饰后则含\n . 除\n . 除\n
(pat) 匹配并获结果 \(pat\) (pat) \(pat\) (pat)或\(pat\) (要表达括号,用\\( \\) ) (pat) \(pat\) (pat)
(?:pat) 匹配但不获结果 不支持 不支持 不支持 不支持 (?:pat) 不支持 (?:pat)
(?=pat) 等于预查 不支持 不支持 不支持 不支持 (?=pat) 不支持 (?=pat)
(?!pat) 不等预查 不支持 不支持 不支持 不支持 (?!pat) 不支持 (?!pat)
| 或 \| | \| |或\| (要表达|,得用\\|) | \| |
其中任意字符 [xyz] [xyz] [xyz] [xyz] [xyz] [xyz] [xyz]
[.ch.] [=ch=] 不支持 不支持 [.ch.] 不支持 不支持 不支持 不支持
单词边界 \b \b \b \b 不支持 \b 不支持 \b
非单词边界 \B \B \B \B 不支持 \B 不支持 \B
单词左右边界 <> \< \> \< \> \< \> 不支持 (><和\>\<和\\>\\<同义 不支持(><和\>\<同义 \< \> 不支持(><和\>\<同义
控制字符 /cx 不支持 不支持 \cx 不支持 \cx 不支持 \cx
数字\d 不支持 不支持 不支持 不支持 \d \d \d
非数字\D 不支持 不支持 不支持 不支持 \D \D \D
换页 \f 不支持 不支持 高版本支持 \f \f 另义 \f表示文件名字符 \f
换行 \n 不支持 不支持 不支持 \n \n \n \n
回车 \r 不支持 不支持 \r \r \r \r \r
空白 \s 不支持 不支持 不支持 不支持 \s \s \s
非空白 \S 不支持 不支持 不支持 不支持 \S \S \S
制表符 \t 不支持 不支持 高版本支持 \t \t \t \t
垂直制表符 \v 不支持 不支持 高版本支持 \v \v 另义 \v表示very magic \v
单词字符 \w [A-Za-z0-9_] \w \w \w 不支持 \w \w \w
非单词字符 \W [^A-Za-z0-9] \W \W \W 不支持 \W \W \W
\xn 16进制 不支持 不支持 高版本支持 \xn \xn 另义 \x表示[0-9A-Za-z] \xn
\n 八进制 不支持 不支持 不支持 \n \n 不支持 \n
\n 后向引用 \n \n \n \n 仅取结果可用 \n \n 仅取结果可用 \n
[:alnum:] 字母和数字 [:alnum:] [:alnum:] [:alnum:] [:alnum:] [:alnum:] [:alnum:] 不支持
[:alpha:] 字母 [:alpha:] [:alpha:] [:alpha:] [:alpha:] [:alpha:] [:alpha:] 不支持
[:cntrl:] 控制字符 [:cntrl:] [:cntrl:] [:cntrl:] [:cntrl:] [:cntrl:] [:cntrl:] 不支持
[:digit:] 数字 [:digit:] [:digit:] [:digit:] [:digit:] [:digit:] [:digit:] 不支持
[:graph:] 可打印字符(不含空格) [:graph:] [:graph:] [:graph:] [:graph:] [:graph:] [:graph:] 不支持
[:lower:] 小写 [:lower:] [:lower:] [:lower:] [:lower:] [:lower:] [:lower:] 不支持
[:print:] 可打印字符(含空格) [:print:] [:print:] [:print:] [:print:] [:print:] [:print:] 不支持
[:punct:] 标点 [:punct:] [:punct:] [:punct:] [:punct:] [:punct:] [:punct:] 不支持
[:space:] 空格 [:space:] [:space:] [:space:] [:space:] [:space:] [:space:] 不支持
[:upper:] 大写字母 [:upper:] [:upper:] [:upper:] [:upper:] [:upper:] [:upper:] 不支持
[:xdigit:] 16进制数字 [:xdigit:] [:xdigit:] [:xdigit:] [:xdigit:] [:xdigit:] [:xdigit:] 不支持
[:return:] 不支持 不支持 不支持 不支持 不支持 [:return:] 不支持
[:tab:] 不支持 不支持 不支持 不支持 不支持 [:tab:] 不支持
[:escape:] 不支持 不支持 不支持 不支持 不支持 [:escape:] 不支持
[:backspace:] 不支持 不支持 不支持 不支持 不支持 [:backspace:] 不支持

linux的grep默认是不支持perl正则表达式的

搞半天。
linux的grep默认是不支持perl正则表达式的。
我写的\d+之类的都没反应。
所以要加一个-P的参数,注意P是大写。
比如下面这样
|grep -P ‘\d{2,3}’
(上例是用管道把要查找的内容带过来,不然后面还应该有要查找的文件啥的)
之前我看到网上的说明说大刮号在bash里有特殊作用,因此要在它前面加上转义符(\)”。
但很显然,加了P之后,不用再搞这种了。
#######次日补充#######
P不是哪儿都支持,安卓里就没有这个开关,数字可以写成[0~9]
另外,安卓不像centos,里面的大刮号当真是要写斜杠才能用的,或许我在centos里用了P开关所以可以直接用吧

linux命令行中直接执行mysql语句

其实我一开始是拒绝的,但是貌似就得这么做。怎么一行一行的来?没法整了。

有两种方法可以在命令行下执行sql命令。第一种是使用“-e“参数来指定需要执行的sql语句;第二种是通过管道的方式。语法及例子如下:
1、
代码如下 复制代码
MYSQL_HOME/bin/mysql -u用户名 -p密码 -D数据库名 -e”sql 语句”
/usr/local/mysql/bin/mysql -uroot -p123456 -Dmysql -e”select host,user from user”;
2、

有两种方法可以在命令行下执行sql命令。第一种是使用“-e“参数来指定需要执行的sql语句;第二种是通过管道的方式。语法及例子如下:

1、

 代码如下 复制代码
MYSQL_HOME/bin/mysql -u用户名 -p密码 -D数据库名 -e”sql 语句”
/usr/local/mysql/bin/mysql -uroot -p123456 -Dmysql -e”select host,user from user”;

2、

 代码如下 复制代码
echo “sql 语句” | MYSQL_HOME/bin/mysql -u用户名 -p密码 -D数据库名
echo “select host,user from user” | /usr/local/mysql/bin/mysql -uroot -p123456 -Dmysql

代码如下 复制代码
echo “sql 语句” | MYSQL_HOME/bin/mysql -u用户名 -p密码 -D数据库名
echo “select host,user from user” | /usr/local/mysql/bin/mysql -uroot -p123456 -Dmysql

找好数

function getGoodNum(page){
console.log(page);
//var reg=/1[3578]\d*([123567890]{3})\1\d*/g;
var reg=/1[3578]\d*([123567890]{2})\1\d*/g;
var matches=page.match(reg);
if(matches){alert(matches)}
}

 

在wordpresss里想用code标签,就要先进到“文本”模式。

在看某国企的网站代码时,发现它竟然还用了eval来混淆代码,害我先上网找了代码来“破解”它,其实只要在Html里找到一个方法,在控制台里运行一下,啥都能看到,除非它进行了压缩,方法内部变量都变成abc,否则这种混淆根本一点意义都没有,到了控制台里怎么阅读都可以。只有那种用了奇怪的MVC的代码,还有点坑爹。否则都没啥意义。

每次搞这些,最后都会发现自己太过于急躁,其实一步步来,遇到的坑就会少很多。

上线惊魂

产品上线前还各种大改这种事,老司机肯定是司空见惯了。

让人难堪的是这样的场景:

上线前的压力测试把重要的不可再生的资源给消耗光了!

我曾经反复问过这个事,我说听说这玩意数量有限,说没事,没事,没事……

昨夜在梦中遇到骗局

梦见自己又出国玩了,好像是报了一个什么奇怪的团,结果飞机落地不知道停在哪个国家,住在一个破烂的楼里,都没出门,开始睡觉,直到醒来才发现自己在一个奇怪的地方。

回来之后,突然醒悟到可能根本没有到目的地。

在梦里疯狂地思考、探究,这种体验实在是太差了,然而我百分80的梦都是这样的,每次醒来,都觉得好累。有时候感觉这样睡得再多还不如3点钟睡觉不做梦来得好。

智能卡已过期?

今天不舒服,就请假没上班,然而呆家也睡不着觉,爬起来打扫卫生,扫着扫着就折腾到歌华有线机顶盒那儿去了。
上次开电视遭遇两个问题,一是电视机红屏,现在想想crt本来就有这个现象只要开机一段时间就好了;二是机顶盒报智能卡已过期。我也没搞清楚是自己欠费还是机子出问题了,这回决心把歌华给停了。
但是办停机也好,办暂停也好,都得带证件和用户回执,我忙乎一天最后还是没出门,连歌华营业厅在哪儿都没查到(上次在哪儿来着?)后来我找到了最早的一份回执,上面显示的信息表明我不可能欠费,因为我绑的银联卡是活着的,于是我想还是想办法救活它吧。

打开电视一看,自动播放cctv1,我还以为它发神经了,到主页一找台,页面都没问题,但除了央视其它都显示智能卡过期,后来我翻帮助,莫名弹出界面叫我刷新,刷新的办法是把央视1套打开10到30分钟,我猜这刷新大概与过期有关。于是打开央视等,边等边查,结果发现有人说新用户遇到过期时打开央视1半小时就能好,等了10几分钟一看,果然频道都可用了。只是高清频道也不怎么高清,不知道是不是av端子不行。

真没想到,所谓”智能卡已过期”得这么解决!

我也是服了机顶盒开发商,好好说话能死吗?别说过期这种吓唬人的话是不是省很多误解,比如就说”智能卡需要刷新,请打开央视1等待10分钟”什么的。相信总有办法把话说清楚。字少说不清就多说几句啊!

差点以为丢了钱包

昨晚没带钱包回家,
今天早上作死要去上班,
上班时没钱包也不奇怪。
倒是到了中午吃饭的时候才发觉。
此时仍然不急,因为好久没丢过什么东西了。
只当钱包没带,借钱吃。
晚上回家发现钱包不在家里。
跑地铁站问,人家说没有。
打电话找公交问,人家说帮我找,没好说了10占,为我再问,结果没等再打过去,家里人来问我了,他们一找,还真发现是因为我没带。
OK,差点准备明早去派出所办临时身份证了。
现在遇到这些事好淡定,也不知道为什么。

幸甚至哉,歌以咏志。

以上这些文字竟然是我在看不见的情况下打出来的……因为页面js的问题,编辑器一片空白。

我原本想好了如果真丢了,以后该如何惩戒自己,又如何改善自己生活习惯,还想到了如何实现之前的自动提醒创意。

现在好了,我不必惩戒自己,下决心改变一些陋习就好了。