还是用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///操作符的说明。

《还是用perl来替换sed\grep吧》有1个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注