假设我有以下文件:
$ 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
正如名称所述,只留下唯一的行,并且重复项会合并