如何从给定的事件中删除匹配的模式

我试图删除匹配模式,从第二次出现,使用sedawk 。 input文件包含以下信息:

 abc def abc ghi jkl abc xyz abc 

我想从第二个实例中删除模式abc 。 输出结果如下:

 abc def ghi jkl xyz 

整洁的sed解决方案:

 sed '/abc/{2,$d}' test.txt abc def ghi jkl xyz 
 $ awk '$0=="abc"{c[$0]++} c[$0]<2; ' file abc def ghi jkl xyz 

只要将“2”更改为“3”或任何您想保留前N个事件的号码,而不是第一个1。

一种使用awk

 $ awk 'f&&$0==p{next}$0==p{f=1}1' p="abc" file abc def ghi jkl xyz 

只需将p设置为只打印第一个实例即可:

取自: unix.com

使用awk '!x[$0]++'将删除重复的行。 x是一个数组,它被初始化为0.x的索引是$ 0,如果$ 0是第一次见面,那么加1到x [$ 0]的值,x [$ 0]现在是1.As ++这里是“后缀++“,返回0,然后被添加。所以!x [$ 0]为真,$ 0是默认打印的。如果$ 0出现多次,! x [$ 0]将为false,因此不会打印$ 0。