我有一个文本文件,我想在“String1”之后和“String2”之前使用unix shell命令(例如grep,awk,sed)提取。 文本文件的一部分如下(我需要在“特定”之后和第二个虚线之前):
------------------
Specific:
line1
line2
------------------
line3
答案 0 :(得分:4)
基于Extract lines between two patterns from a file:
$ awk '/------------------/ {p=0}; p; /Specific/ {p=1}' file
line1
line2
引用我自己的解释:
- 当找到
pattern1
时,则变量p = 1。- 它只是在
p==1
时打印行。这是通过p
条件完成的。如果是,则执行默认的awk操作,即print $0
。否则,它没有。- 当找到
pattern2
时,则变量p = 0。在p
条件之后检查此条件时,它将打印其中的行pattern2
第一次出现。
所以区别在于在打印之前检查------------------
行,以便可以停止标记。打印后会检查Specific
行,以便打开该标志而不打印此特定行。
设置next
后,也可以使用p=1
完成,以便awk
跳转到下一行:
awk '/------------------/ {p=0} /Specific/ {p=1; next} p' file