我正在寻找一种方法来从一堆文件中删除一个特定行,但前提是该行在该文件中多次出现。即使其他行重复,也应保留其他行。
例如,像这样的文件,我要删除其中的重复项 AAA
AAA
BBB
AAA
BBB
CCC
应该成为
AAA
BBB
BBB
CCC
我想我应该使用,sed
但是我不知道如何编写命令。
使用GNU sed
:
sed '0,/^AAA$/b;//d'
也就是说,让所有内容通过(b
像a一样分支continue
)直到第一行AAA
(从第0行(甚至在第一行之前)和第一个匹配项/^AAA$/
(可能是第一行)),然后进行其余的操作行,删除每次出现的情况AAA
(一个空//
模式会重用最后一个模式)。
地址sed
需要GNU 0
(以及b
在同一个表达式中具有另一个命令的能力,尽管在其他实现中可以很容易地通过使用两个-e
表达式来解决该问题)
与awk
:
awk '$0 != "AAA" || !n++'
(或对于正则表达式模式:awk '!/^AAA$/ || !n++'
)
简写:
awk '! (&0 == "AAA" && count > 0) {print; count++}'
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句