我有一个小脚本,可以在所有txt文件中搜索字符串并输出匹配项。有没有办法在匹配上方显示文件名,但只有在找到匹配项时?目前我正在使用这个:
find . -iname "*.txt" -print0 | xargs -0 awk -v RS='' 'tolower($0) ~ /cool/;'
我尝试将FILENAME添加到脚本的末尾,但现在它只显示文件名而不是匹配项:
find . -iname "*.txt" -print0 | xargs -0 awk -v RS='' 'tolower($0) ~ /cool/{print FILENAME};'
答案 0 :(得分:3)
您没有打印该行,请更改为
... {print $0, FILENAME} ...
不带参数的 print
表示print $0
,默认语句为{print}
,如第一个脚本中所示。
答案 1 :(得分:2)
使用grep
单行,这是一种更为简单的方法:
grep -rio 'cool' --include=*.txt
-r
- 递归处理
-i
- 忽略大小写
-o
- 仅打印匹配的子字符串/部分
--include=*.txt
- 仅搜索名称与*.txt
匹配的文件
输出应包含文件名和匹配/找到的部分格式:
<filename1>.txt:cool
<filename2>.txt:cOol
<filename3>.txt:COOL
...