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
但我不知道如何编写命令。
使用 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)