如何使用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没问题。
答案 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