删除与模式匹配的第一行

时间:2014-06-06 09:12:40

标签: sed

如何使用sed仅删除包含特定模式的第一行?

例如,我想从此文档中删除与FAA匹配的第一行:

1. foo bar quuz
2. foo FAA bar (this should go)
3. quuz quuz FAA (this should remain)
4. quuz FAA bar (this should also remain)

结果应为

1. foo bar quuz
3. quuz quuz FAA (this should remain)
4. quuz FAA bar (this should also remain)

非常感谢POSIX sed的解决方案,GNU sed没问题。

5 个答案:

答案 0 :(得分:4)

使用GNU sed,您可以使用以下习语:

sed '0,/FAA/{/FAA/d}' input.txt

它将它的动作应用于从文件开头到第一次出现FAA的范围。然后它删除了这一行。

答案 1 :(得分:4)

这可能适合你(GNU sed):

sed -n '/FAA/{:a;n;p;ba};p' file

打印所有行,直到遇到FAA,然后跳过该行并将所有后续行打印到文件末尾。

答案 2 :(得分:2)

sed '1 {/FAA/ d;};1,/FAA/ {/FAA/d;}' YourFile

第一线的FAA案例需要进行特殊测试(或者是第一次出现和下一次)

替代

sed '/FAA/ !b
   N;s/.*\n//
:end
   N
   $ p
   b end' YourFile

答案 3 :(得分:0)

使用awk,这很简单:

awk '!f && /FAA/ {f=1;next}1' file
1. foo bar quuz
3. quuz quuz FAA (this should remain)
4. quuz FAA bar (this should also remain)

答案 4 :(得分:0)

使用GNU sed

sed '0,/FAA/{//d}' file

详情=> info sed