[英]using regex with sed to delete the line just below the matching pattern
[英]Restrict sed to delete a single matching line only
我的目標很簡單。 給定一個包含數據的文件:
$ cat yes
ayaz
khan
ayaz
ahmed
ayaz
something
ayaz
我希望使用sed
刪除與表達式ayaz
匹配的第一行。 ( 當然,這是示例數據,在實際數據中,表達式的第一個匹配項可以出現在任何給定的行上,而不僅僅是第一行。我希望刪除具有表達式的第一個匹配項的行。 )
但是,對於sed
,我無法弄清楚在匹配並刪除第一個匹配項后如何讓sed
放棄。
$ sed '/ayaz/d' yes
khan
ahmed
something
我看過無數的示例,除非一直忽略它,否則無法找到解決方法。 任何有用的指針將不勝感激。
謝謝!
嘗試這個:
sed '0,/ayaz/{/ayaz/d}' yes
這是另一個awk
(甚至比sed
短),並且應該在大多數系統上都可以工作。
awk '!/ayaz/||f++' yes
khan
ayaz
ahmed
ayaz
something
ayaz
使用awk更簡單:
awk '!p && /ayaz/{p=1;next}1' file
khan
ayaz
ahmed
ayaz
something
ayaz
此sed
可以在非gnu sed
上工作,但它留空行:
sed '/ayaz/{s///;:a;n;ba}' yes
khan
ayaz
ahmed
ayaz
something
ayaz
gnu sed
較短版本(但仍比我的awk
)
sed '0,/ayaz/{//d;}' yes
khan
ayaz
ahmed
ayaz
something
ayaz
另一個版本(在我的busybox系統上不起作用):
sed 'x;/./{x;b};x;/ayaz/{h;d}' yes
khan
ayaz
ahmed
ayaz
something
ayaz
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.