读取文件中的特定字符串并在匹配后读取行

时间:2018-09-05 18:10:20

标签: string awk

我有一个看起来像这样的文件:

AA  
2   
3  
4  
CCC  
111  
222  
333  
XXX  
12  
23  
34

我正在寻找awk命令,从上方搜索字符串“ CCC”,并打印出出现在“ CCC”之后但在我到达“ XXX”后立即停止阅读的所有行。

一个非常简单的命令为我完成了读取,但并没有停止在XXX。

awk '$0 == "CCC" {i=1;next};i && i++' c.out

2 个答案:

答案 0 :(得分:1)

请您尝试以下。

解决方案第一: 使用sed

sed -n '/CCC/,/XXX/p'  Input_file

解决方案2: 使用awk

awk '/CCC/{flag=1} flag; /XXX/{flag=""}'  Input_file

解决方案3rd: :如果要从字符串CCC打印到XXX,但又不想从这些字符串打印,请执行以下操作。

awk '/CCC/{flag=1;next} /XXX/{flag=""} flag' Input_file

答案 1 :(得分:1)

“在此与该之间做点事情”可以轻松地通过range pattern解决:

awk '/CCC/,/XXX/' # prints everything between CCC and XXX (inclusive)

但这并不是您所要求的。您想在CCC上打印所有 XXX quit (停止阅读)的内容。转换为

awk '/XXX/{exit};f;/CCC/{f=1}'