使用awk或sed删除模式之前的所有内容,包括模式

时间:2013-09-27 09:29:06

标签: unix awk sed pattern-matching

aaa aaaa aaaa aaaa
sss ssss ssss ssss
ddd dddd dddd dddd
fff ffff ffff ffff
abc pattern asd fde 
111 222 333 444 555
666 777 888 999 000

所需输出:如果

111 222 333 444 555
666 777 888 999 000

3 个答案:

答案 0 :(得分:11)

只要找到模式,就设置一个标志。从那一刻开始,打印出以下几行:

$ awk 'p; /pattern/ {p=1}' file
111 222 333 444 555
666 777 888 999 000

或者

awk '/pattern/ {p=1;next}p' file

它在每一行中查找pattern。找到它后,变量p设置为1.棘手的一点是,p>0时只打印线条,以便打印以下行。

当没有这样的第二种模式时,这是How to select lines between two patterns?的特定情况。

答案 1 :(得分:8)

sed '1,/pattern/d' file

适用于您的示例。

sed '0,/pattern/d' file

更可靠。

答案 2 :(得分:2)

另一个sed解决方案:

sed ':loop;/pattern/{d};N;b loop' file.txt