如何仅删除文件中紧随其后的重复行

Cas*_*Cas 3 command-line text-processing

假设我有以下文件:

$ cat test.txt
a
-----
b
-----
-----
c
-----
-----
-----
d
-----
e
-----
-----
Run Code Online (Sandbox Code Playgroud)

现在我想删除所有-----, 但前提是它们相互重复。所以结果应该是这样的:

a
-----
b
-----
c
-----
d
-----
e
-----
Run Code Online (Sandbox Code Playgroud)

我试过了grep -Pvz -- "-----\n-----",但这没有用。

ste*_*ver 10

这正是该uniq命令的用途:

NAME
       uniq - report or omit repeated lines

SYNOPSIS
       uniq [OPTION]... [INPUT [OUTPUT]]

DESCRIPTION
       Filter adjacent matching lines from INPUT (or standard input), writing to OUTPUT
       (or standard output).

       With no options, matching lines are merged to the first occurrence.
Run Code Online (Sandbox Code Playgroud)

所以

$ uniq test.txt 
a
-----
b
-----
c
-----
d
-----
e
-----
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用此 sed one-liner 69. 从文件中删除重复的连续行(模拟“uniq”)来自Sed One-Liners Explained,第三部分:选择性删除某些行和特殊应用程序

sed '$!N; /^\(.*\)\n\1$/!P; D' test.txt
Run Code Online (Sandbox Code Playgroud)

如果您想test.txt就地编辑(通过添加-i--in-place选项),这可能是首选。