如何在不排序的情况下使用 Sed 删除重复行?
How do I remove duplicate lines using Sed without sorting?
我一直在尝试找出如何仅使用 Sed 删除重复行,但我在弄清楚如何做时遇到了麻烦。
到目前为止,我已经试过了,但没有奏效。
sed '$!N; /^\(.*\)\n$/!P; D'
文件:
APPLE
ORANGES
BANANA
BANANA
COOKIES
FRUITS
我得到的:
APPLE
ORANGES
BANANA
BANANA
COOKIES
FRUITS
我想要的:
APPLE
ORANGES
BANANA
COOKIES
FRUITS
我一直在想办法做到这一点,这样我就不必手动遍历文件中的每一行并告诉它手动删除重复项。
我的目标是最终删除 BANANA 的第二个实例。
谁能指出我正确的方向?
谢谢
嗯,这很奇怪,这似乎对我有用。是因为每个 text-line 之间有一个空行吗?
~$ cat test.txt
APPLES
ORANAGES
BANANA
BANANA
COOKIES
FRUITS
~$ cat test.txt | sed '$!N; /^\(.*\)\n$/!P; D'
APPLES
ORANAGES
BANANA
COOKIES
FRUITS
使用sed
$ sed -n '/^$/d;G;/^\(.*\n\).*\n$/d;H;P;a\ ' input_file
APPLE
ORANGES
BANANA
COOKIES
FRUITS
删除空行。追加保留 space。如果该行重复,则将其删除,否则复制到 hold space,打印并插入空行。
这可能对你有用 (GNU sed):
sed -E '1s/^/\n/;:a;N;s/((\n\S+)(\n\S+)*)\n$//;$!ba;s/.//' file
在第一行,为正则表达式插入一个换行符。
收集模式 space 中的行,添加时删除重复项(预先加上空行)。
在文件末尾,删除引入的换行符并打印结果。
我一直在尝试找出如何仅使用 Sed 删除重复行,但我在弄清楚如何做时遇到了麻烦。
到目前为止,我已经试过了,但没有奏效。
sed '$!N; /^\(.*\)\n$/!P; D'
文件:
APPLE
ORANGES
BANANA
BANANA
COOKIES
FRUITS
我得到的:
APPLE
ORANGES
BANANA
BANANA
COOKIES
FRUITS
我想要的:
APPLE
ORANGES
BANANA
COOKIES
FRUITS
我一直在想办法做到这一点,这样我就不必手动遍历文件中的每一行并告诉它手动删除重复项。
我的目标是最终删除 BANANA 的第二个实例。
谁能指出我正确的方向?
谢谢
嗯,这很奇怪,这似乎对我有用。是因为每个 text-line 之间有一个空行吗?
~$ cat test.txt
APPLES
ORANAGES
BANANA
BANANA
COOKIES
FRUITS
~$ cat test.txt | sed '$!N; /^\(.*\)\n$/!P; D'
APPLES
ORANAGES
BANANA
COOKIES
FRUITS
使用sed
$ sed -n '/^$/d;G;/^\(.*\n\).*\n$/d;H;P;a\ ' input_file
APPLE
ORANGES
BANANA
COOKIES
FRUITS
删除空行。追加保留 space。如果该行重复,则将其删除,否则复制到 hold space,打印并插入空行。
这可能对你有用 (GNU sed):
sed -E '1s/^/\n/;:a;N;s/((\n\S+)(\n\S+)*)\n$//;$!ba;s/.//' file
在第一行,为正则表达式插入一个换行符。
收集模式 space 中的行,添加时删除重复项(预先加上空行)。
在文件末尾,删除引入的换行符并打印结果。