【发布时间】:2020-05-27 16:49:48
【问题描述】:
我正在尝试查找日志文件中出现的单词,并显示与以下模式匹配的任何内容的日志文件名:
'BA10\|BA20\|BA21\|BA30\|BA31\|BA00'
所以如果文件 dummylogfile.log 包含 BA10002 我想得到如下结果:
dummylogfile.log:BA10002
如果日志文件出现两次重复匹配完全没问题。
我得到的最接近的是:
for f in $(find . -name '*.err' -exec grep -l 'BA10\|BA20\|BA21\|BA30\|BA31\|BA00' {} \+);do printf $f;printf ':';grep -o 'BA10\|BA20\|BA21\|BA30\|BA31\|BA00' $f;done
但这给出了类似的东西:
./register-05-14-11-53-59_24154.err:BA10
BA10
./register_mdw_files_2020-05-14-11-54-32_24429.err:BA10
BA10
./process_tables.2020-05-18-11-18-09_11428.err:BA30
./status_load_2020-05-18-11-35-31_9185.err:BA30
所以,
1) 有空行只有第二个匹配和
2) 未显示完整匹配项(例如 BA10004)。
感谢您的帮助
【问题讨论】:
-
GNU grep 的选项
-H可能会有所帮助。 -
酷,谢谢!!这已经非常接近答案了(我还没有意识到,但确实很有帮助)