我試圖使用sed
或awk
刪除匹配模式,從第二次出現開始。輸入文件包含以下信息:我想從第二個實例中刪除模式abc
如何從給定匹配項中刪除匹配模式
abc
def
abc
ghi
jkl
abc
xyz
abc
。輸出應該如下:
abc
def
ghi
jkl
xyz
我試圖使用sed
或awk
刪除匹配模式,從第二次出現開始。輸入文件包含以下信息:我想從第二個實例中刪除模式abc
如何從給定匹配項中刪除匹配模式
abc
def
abc
ghi
jkl
abc
xyz
abc
。輸出應該如下:
abc
def
ghi
jkl
xyz
整潔sed
解決方案:
sed '/abc/{2,$d}' test.txt
abc
def
ghi
jkl
xyz
來自unix.com
使用awk '!x[$0]++'
將消除重複行。 x是一個數組,它被初始化爲0.x的索引是$ 0,如果$ 0是第一次見面,那麼加1到x [$ 0]的值,現在x [$ 0]是1.As ++這裏是「後綴++「,返回0,然後加入.So!x [$ 0]爲真,默認情況下打印$ 0。如果$ 0出現多次,! x [$ 0]將爲false,因此不會打印$ 0。使用awk
這也將刪除任何其他模式的重複。我認爲OP只是希望刪除給定模式的副本。 –
方式一:
$ awk 'f&&$0==p{next}$0==p{f=1}1' p="abc" file
abc
def
ghi
jkl
xyz
只需設置p
圖案,您只需要打印的第一個實例:
$ awk '$0=="abc"{c[$0]++} c[$0]<2; ' file
abc
def
ghi
jkl
xyz
剛將「2」更改爲「3」或任何數字你w螞蟻保持前N個事件而不是前1個。
如果第一個'abc'模式發生在第二行或更後,這將不起作用。這個命令只是忽略第一行,從第二行解析到最後一行:'2,$'。 –