Ski*_*rou 10
还有两个选择:
awkawk '{if ($0~"pattern") print $0; nextfile;}' mydir/*
Run Code Online (Sandbox Code Playgroud)
或者如果您的awk版本不支持nextfile(感谢 Stéphane Chazelas 的建议):
awk 'FNR==1{if ($0~"pattern") print $0;}' mydir/*
Run Code Online (Sandbox Code Playgroud)
将在切换到下一个文件之前仅读取第一行,并仅在匹配"pattern".
优点是可以微调要搜索模式$2的字段(例如仅使用搜索第二个字段)和输出(例如$3打印第三个字段FILENAME,或什至混合)。
请注意,使用FNR(“当前输入记录号”,即行号)版本,您可以进一步微调您想要 grep 的行:FNR==3对于第三行,FNR<10对于前 10 行,等等(我猜测在这种情况下,如果您正在处理非常大的文件并且您的awk版本支持它,您可能希望混合FNR使用nextfile以提高性能。)
head,保留文件名head -n1 -v mydir/files*|grep -B1 pattern
Run Code Online (Sandbox Code Playgroud)
-voption ofhead将打印文件名,option -B1ofgrep将打印匹配行的前一行 - 即文件名。如果您只需要文件名,您可以通过管道将其进一步传输到grep :
head -n1 -v mydir/*|grep -B1 pattern|grep ==>
Run Code Online (Sandbox Code Playgroud)
正如 don_crissti 在评论中所注意到的,请注意与模式本身匹配的文件名,不过……
我已经实现了@Rob的评论并成功获得了预期的结果。
替换string为您的字符串。
grep -Rin "string" . | grep ":1:.*string" > result.txt
Run Code Online (Sandbox Code Playgroud)
这会在当前目录中进行不区分大小写的递归搜索string并打印行号。然后它在文件中搜索第 1 行的匹配项,并将输出保存到名为 的文件中result.txt。
| 归档时间: |
|
| 查看次数: |
17677 次 |
| 最近记录: |