如何仅删除文件中紧挨着的重复行

如何仅删除文件中紧挨着的重复行

假设我有以下文件:

$ cat test.txt
a
-----
b
-----
-----
c
-----
-----
-----
d
-----
e
-----
-----

现在我想删除所有的-----,但前提是它们彼此重复。因此结果应如下所示:

a
-----
b
-----
c
-----
d
-----
e
-----

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

答案1

这正是该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.

所以

$ uniq test.txt 
a
-----
b
-----
c
-----
d
-----
e
-----

或者,你可以使用这个 sed 单行命令69. 从文件中删除重复的连续行(模拟“uniq”)Sed 单行命令详解,第三部分:选择性删除特定行和特殊应用

sed '$!N; /^\(.*\)\n\1$/!P; D' test.txt

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

答案2

只需做uniq filename.txt 正如名称所述,只留下唯一的行,并且重复项会合并

相关内容