我试图删除匹配模式,从第二次出现,使用sed
或awk
。 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。