AWK找到匹配时如何显示文件名?

时间:2017-11-01 13:29:25

标签: linux awk

我有一个小脚本,可以在所有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};' 

2 个答案:

答案 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
...