使用“find”,然后在 bash 脚本中的每一行中搜索两个值

使用“find”,然后在 bash 脚本中的每一行中搜索两个值

大家好,我有很多文件,我用“查找”递归地搜索,然后一旦找到所有这些文件类型,我想删除每行上与该字符串不匹配的所有记录,按以下顺序:

INPUT||||SELECT 'BLABLA' as SOR'

- 其中 INPUT||||SELECT(不区分大小写)开始一行 - 单引号 (BLABLA) 之间的内容是随机的,所以我在这里需要一个通配符
- 其中 'as SOR' 不区分大小写

搜索到的数据文件之一的示例:

1) INPUT||||select 'LLC'    
2) INPUT||||select 'LLC' as SOR, b.cust_id_num, b.cust_federal_id_num, ...
3) INPUT||||select distinct 'LLC' as SOR, b.cust_id_num, b.cust_federal_id_num, ...
4) INPUT||||select 'BBD' as sor, b.cust_id_num, b.cust_federal_id_num, ...
5) INPUT||||SELECT 'GOD' $VAL, b.cust_ID_num, a, cust live num...
6-+++)... 

成功的搜索应产生以下结果:
-1st 行将被忽略,不会出现 'as sor' 的迭代
-2nd 行将被捕获,因为它满足所有条件
-3rd 行将被忽略,因为 'distinct' 出现在 'select' 和 ' 之间sor'
-4th 行将被捕获,因为它满足所有条件
-5th 行将被忽略,不会迭代 'as sor'

我尝试了很多事情但没有运气:

find . -type f -iname "*.dat" -exec sh -c awk '/INPUT||||select/ && /'as SOR'/' "{}" \; > FILE.log
find . -type f -iname "*.dat" -exec grep 'INPUT_SELECT\|as sor' {} \; >  FILE .log

我真的以为这样的东西会在我的剧本中发挥作用,但没有那么幸运!

grep -i "INPUT\||||select \<'...'\> as sor" ...

我已经尝试了各种转义和引用以使事情正确,但我仍然返回不符合订单提及条件的记录。提前致谢!

答案1

这个怎么样?

grep -i -e "INPUT||||select '.*' as SOR" test.in

相关内容