Pie*_*ean 3 grep find awk ripgrep
如何找到在特定行号上包含特定模式的文件?假设我有一个目录,其中包含一堆包含 3 行的文本文件,例如:
Title A
Category X
Description Y
Run Code Online (Sandbox Code Playgroud)
如何 grep/过滤每个在线Category X
文件2
?如何找到包含Title A
as 行的文件1
?
我查看了 grep 手册页、ripgrep 和替代方案,但不确定是否可以将模式搜索限制为特定行号。
awk
你可以这样使用:
awk 'FNR == 2 && /Category X/ {print FILENAME}' *
Run Code Online (Sandbox Code Playgroud)
当在第二行中找到模式时,您可以使用find
withawk
来退出处理文件的其余部分,或者如果在第二行中没有找到模式,也可以退出。
find -type f -name 'xyz*.txt' -exec \
awk 'NR==2{ if(/pattern/) print FILENANE; exit }' {} \;
Run Code Online (Sandbox Code Playgroud)
grep
只是为了好玩:
PAT="Category X"
LN=2
> grep -n "$PAT" file* | grep ":$LN:$PAT$" | grep -o "^[^:]*"
file1
file2
Run Code Online (Sandbox Code Playgroud)