簡體   English   中英

限制s僅刪除單個匹配行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM