我试图使用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,$'。 –