查找扩展名为 .xyz 的文件,但仅在找到两个术语时返回记录

查找扩展名为 .xyz 的文件,但仅在找到两个术语时返回记录

我的情况是,我必须在整个集群中搜索扩展名为 .xyz 和 sed/grep/awk/? 的文件​​。 off 仅包含分别包含两个不同值“CONFNAME”和“INPUTSQL”的记录。

问题:
1. 构建返回此信息的正确管道。
2. 删除这两个值之间的 50 行垃圾,并格式化为包含两列的 csv。

示例文件:

1_TOD_DO_ON.x
1  !prototype|P|||${AIDQ_MP}/dA_lookIP.mp
2  CONFNAME|$|||ITEST_New_Deal
...
...
50 INPUTSQL||||Select \n 'ITOD|L1235'

这些 .zyz 文件所需的两条数据是ITEST_新_交易ITOD|L1235(逗号分隔)。

我为问题 1 尝试过的一些方法

cd To_Correct_Search_Path

A。

find . -type f -iname "*.xyz" -exec egrep -i CONFNAME --color=auto --with-filename {} \; 

//只找到一个值

B.

find . -type f \( -iname "*.xyz" -o -name "CONFNAME" -o -name "INPUTSQL" \) -exec sh -c 'echo "$0"' {} \; >

//如果“INPUT_SQL”则仅查找最后一个值

C。

find . -type f -iname "*.pset" -exec egrep -i CONFNAME egrep -i INPUTSQL --color=auto --with-filename {} \; 

//只查找最后一个值

对于问题2

为了删除 to 值之间的垃圾,我想关闭这两个不同的值但将这些值包含在搜索返回的信息中。我这里有一些想法,但我需要先解决问题 1。绝对欢迎建议!

答案1

关于你的第一个问题:

你可以结合findgrep。而且你还可以组合多个grep。第一个grep不打印任何内容 ( -q),最后一个仅在另一个通过后才打印文件。

这将只找到包含这两个字符串的文件:

find . -type f -iname "*.xyz" \
  -exec sh -c 'grep -qi CONFNAME "{}" && grep -li INPUTSQL "{}"' \;

当你陷入困境时,第二个问题可能值得提出一个新问题。可能有利于awk.

相关内容