最简单的 sed 删除文档中任意位置的所有重复项

问题描述 投票:0回答:3

sed 最简单的代码如何删除文档中任意位置的所有重复行

我猜这个参考脚本只有在连续的情况下才会这样做,不是吗?

sed -E '$q; N; /^(.*)\n\1$/!{ P; D }; :L $d; s/.*\n//; N; /^(.*)\n\1$/bL; D
sed
3个回答
1
投票

这可能对你有用(GNU sed):

sed -E 'H;x;s/((\n[^\n]*).*)\2$/\1/;x;$!d;x;s/.//' file

将每一行添加到保留空间,如果以前发生过,则将其删除。

在文件末尾,删除第一个引入的换行符。


1
投票

使用

sed
,假设您的输入文件如下所示;

$ cat input_file
one
one
two
one
three
four
three
three
five
two
five
four
three
four
four
five
$ sed -n 'G;/^\(.*\n\).*\n\1$/d;H;P' input_file
one
two
three
four
five

0
投票

如果我理解正确,您想要删除文件中除第一个重复行之外的所有内容,对吗?

所以

alpha
beta
beta
gamma
beta
delta
alpha
delta

成为

alpha
beta
gamma
delta

所以不要使用

sed
。使用 Perl 逐行遍历文件并仅打印以前未见过的行:

perl -ne'print unless $seen{$_}++' input.txt > output.txt
© www.soinside.com 2019 - 2024. All rights reserved.