awk + ​​从第一行打印行直到匹配单词

mai*_*ash 10 linux bash ksh awk

我想打印文件中的所有行,直到匹配词请建议如何使用 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
(((
&&&
Run Code Online (Sandbox Code Playgroud)

所以我需要得到这个

AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP
Run Code Online (Sandbox Code Playgroud)

其他示例(想要打印到 KJGFGHJ )

 cat file.txt1

 HG
 KJGFGHJ
 KKKK
Run Code Online (Sandbox Code Playgroud)

所以我需要得到

 HG
 KJGFGHJ
Run Code Online (Sandbox Code Playgroud)

cuo*_*glm 14

尝试:

$ awk '1;/PPP/{exit}' file
AAA
BBB
JJJ
OOO
345
211
BBB
OOO
OOO
PPP
Run Code Online (Sandbox Code Playgroud)

  • 与上面通过 `sed` 相同:`sed '/PPP/q' infile` (5认同)

小智 8

或者,使用匹配第一行(NR 等于 1)的范围模式,直到一行中“PPP”的第一个匹配项

awk 'NR==1,/PPP/' file
Run Code Online (Sandbox Code Playgroud)

如果该行必须与“PPP”完全匹配,则仅使用

awk 'NR==1,/^PPP$/' file
Run Code Online (Sandbox Code Playgroud)

如果您想对参数列表中的每个文件执行相同操作,请使用 FNR 变量,该变量将每个处理文件的第一行重置为 1

awk 'FNR==1,/PPP/' file1 file2 ...
Run Code Online (Sandbox Code Playgroud)