我想打印文件中直到匹配单词的所有行,请建议如何使用 awk 做到这一点
例如
我想打印直到单词 PPP 为止的所有行
备注第一行应与 AAA(任何单词)不同
cat file.txt
AAA ( the first line/word chuld be any word !!!!! )
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP
MMM
(((
&&&
所以我需要得到这个
AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP
其他示例(想要打印直到 KJGFGHJ )
cat file.txt1
HG
KJGFGHJ
KKKK
所以我需要得到
HG
KJGFGHJ
答案1
尝试:
$ awk '1;/PPP/{exit}' file
AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP
答案2
或者使用与第一行匹配的范围模式(NR 等于 1),直到行中第一次匹配“PPP”
awk 'NR==1,/PPP/' file
如果该行必须与“PPP”完全匹配,则仅使用
awk 'NR==1,/^PPP$/' file
如果您想对参数列表中的每个文件执行相同的操作,请使用 FNR 变量,该变量将每个已处理文件的第一行重置为 1
awk 'FNR==1,/PPP/' file1 file2 ...
答案3
正如OP所说,他的文件的第一行或单词可以包含任何单词(比如PPP
它本身),所以您需要检查这一点并将第一行从匹配中转义并避免从awk
那里退出。
那么你可以试试这个:
输入文件:
PPP # the first line/word chuld be any word !!!!! )
BBB
$$$
JJJ
OOO
PPP
345
PPP
%%%
命令:
awk '1;/PPP/{if (NR>1) exit}' file
输出:
PPP # the first line/word chuld be any word !!!!! )
BBB
$$$
JJJ
OOO
PPP