sed 最简单的代码如何删除文档中任意位置的所有重复行
我猜这个参考脚本只有在连续的情况下才会这样做,不是吗?
sed -E '$q; N; /^(.*)\n\1$/!{ P; D }; :L $d; s/.*\n//; N; /^(.*)\n\1$/bL; D
这可能对你有用(GNU sed):
sed -E 'H;x;s/((\n[^\n]*).*)\2$/\1/;x;$!d;x;s/.//' file
将每一行添加到保留空间,如果以前发生过,则将其删除。
在文件末尾,删除第一个引入的换行符。
使用
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
如果我理解正确,您想要删除文件中除第一个重复行之外的所有内容,对吗?
所以
alpha
beta
beta
gamma
beta
delta
alpha
delta
成为
alpha
beta
gamma
delta
所以不要使用
sed
。使用 Perl 逐行遍历文件并仅打印以前未见过的行:
perl -ne'print unless $seen{$_}++' input.txt > output.txt