我正在尝试使用sed
或awk
从第二次出现开始删除匹配模式。输入文件包含以下信息:
abc
def
abc
ghi
jkl
abc
xyz
abc
我想从第二个实例中删除模式abc
。输出应如下:
abc
def
ghi
jkl
xyz
答案 0 :(得分:6)
整洁的sed
解决方案:
sed '/abc/{2,$d}' test.txt
abc
def
ghi
jkl
xyz
答案 1 :(得分:3)
$ awk '$0=="abc"{c[$0]++} c[$0]<2; ' file
abc
def
ghi
jkl
xyz
只需更改&#34; 2&#34;到&#34; 3&#34;或者你想要保留前N次出现的任何数字,而不仅仅是第一次出现。
答案 2 :(得分:2)
使用awk
的一种方式:
$ awk 'f&&$0==p{next}$0==p{f=1}1' p="abc" file
abc
def
ghi
jkl
xyz
只需将p
设置为您只需要第一个打印实例的模式:
答案 3 :(得分:1)
取自:unix.com
使用awk '!x[$0]++'
将删除重复的行。 x是一个数组,它被初始化为0.x的索引是$ 0,如果$ 0是第一次见面,那么加1到x [$ 0]的值,x [$ 0]现在是1.As + +这里是&#34;后缀++&#34;,0返回然后被添加。所以!x [$ 0]为真,$ 0默认打印。如果$ 0出现不止一次,! x [$ 0]将为false,因此不会打印$ 0.