如何删除文件中特定的重复行?

neX*_*Xus 3 duplicate text-processing uniq

我正在寻找一种方法来从一堆文件中删除一个特定的行,但前提是它在该文件中出现多次。其他行应该保留,即使它们是重复的。

例如,像这样的文件,我想在其中删除重复项 AAA

AAA
BBB
AAA
BBB
CCC
Run Code Online (Sandbox Code Playgroud)

应该成为

AAA
BBB
BBB
CCC
Run Code Online (Sandbox Code Playgroud)

我想我应该使用,sed但我不知道如何编写命令。

Sté*_*las 7

使用 GNU sed

sed '0,/^AAA$/b;//d'
Run Code Online (Sandbox Code Playgroud)

也就是说,让所有内容都通过(b像 a 一样分支continue)直到第一行AAA(从第 0 行(甚至在第一行之前)和第一个匹配/^AAA$/(可能是第一行)),然后是剩余的行,删除每一次出现AAA(空//模式重用最后一个模式)。

地址sed需要GNU 0(并且能够b在同一表达式中的一个之后使用其他命令,尽管在其他实现中可以通过使用两个-e表达式轻松解决)

awk

awk '$0 != "AAA" || !n++'
Run Code Online (Sandbox Code Playgroud)

(或对于正则表达式模式:awk '!/^AAA$/ || !n++'

简写:

awk '! (&0 == "AAA" && count > 0) {print; count++}'
Run Code Online (Sandbox Code Playgroud)