如果下一行相同,则删除该行

干猕猴*_*猕猴桃 15 sed awk text-processing

我可以使用什么 sed/awk 命令?只需sort -u将删除所有实例

输入:

abc
abc
def
abc
abc
def
Run Code Online (Sandbox Code Playgroud)

预期输出:

abc
def
abc
def
Run Code Online (Sandbox Code Playgroud)

Sté*_*las 36

这就是uniq标准命令的用途。

uniq your-file
Run Code Online (Sandbox Code Playgroud)

请注意,uniq像 GNU这样的一些实现uniq会给您排序相同(其中strcoll()返回 0)而不是字节到字节相同(其中memcmp()strcmp()返回 0)的行序列中的第一个。无论uniq实现如何,要强制进行字节到字节的比较,您可以强制使用以下语言环境C

LC_ALL=C uniq your-file
Run Code Online (Sandbox Code Playgroud)


DJM*_*hem 7

Vim 可以很好地实现这一点:

:g/\v^(.*\n)\1/d
Run Code Online (Sandbox Code Playgroud)

或者,如果您更愿意使用 vim 作为命令行工具,您可以这样做

vim file -c "g/\v^(.*\n)\1/d" -c "wq"
Run Code Online (Sandbox Code Playgroud)

这样你就不必为以后退出vim而烦恼;)

解释:

:g/
Run Code Online (Sandbox Code Playgroud)

在与此正则表达式匹配的所有行上...

\v^(.*\n)\1
Run Code Online (Sandbox Code Playgroud)

任何跟随其自身的行...

/d
Run Code Online (Sandbox Code Playgroud)

运行d elete 命令(删除当前行)。该-c "wq"是保存更改并退出。