有这么一个需求,需要将有好几千条查询语句及其执行结果的一个文件中中文名换成一个中文加一个星号的形式(如:李*),其中有一部分数据已经是这种形式的,有一部分数据是证件号码、电话号码类型的等等,类似下面的测试文件,我们需要做的是将中文名上面的sql语句过滤出来,且排除掉已经带有星号的结果的sql语句。如果手动一条一条地将每一个这样的sql找出来将耗费大量的时间,有没有简便的方法呢?
考虑使用grep来实现,代码如下:
#先过滤掉带*的行,剩下的过滤出带"姓名"的及其上的4行(剔除除姓名外的其他类型的数据),然后从过滤出的数据中过滤含有"select"的行
cat test.txt |grep -v ".*\*.*"|grep -B 4 "姓名"|grep "select">a.txt
查看最终的数据,已经将需要的数据全都提取出来了:
tips:grep过滤之前或者之后的几行使用参数为:
-A <行数>: 显示符合条件的行及其后的若干行
-B <行数>: 显示符合条件的行及其前的若干行