我的情况是,我必须在整个集群中搜索扩展名为 .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
关于你的第一个问题:
你可以结合find
和grep
。而且你还可以组合多个grep
。第一个grep
不打印任何内容 ( -q
),最后一个仅在另一个通过后才打印文件。
这将只找到包含这两个字符串的文件:
find . -type f -iname "*.xyz" \
-exec sh -c 'grep -qi CONFNAME "{}" && grep -li INPUTSQL "{}"' \;
当你陷入困境时,第二个问题可能值得提出一个新问题。可能有利于awk
.