Text-Processing

如果下一行相同,則刪除行

  • April 26, 2022

我可以使用什麼 sed/awk 命令?只會sort -u刪除所有實例

輸入:

abc
abc
def
abc
abc
def

預期輸出:

abc
def
abc
def

這就是uniq標準命令的用途。

uniq your-file

請注意,uniq像 GNU 之類的一些實現會為您提供排序相同uniq的行序列中的第一行(其中返回 0),而不是逐字節相同(或返回 0)。無論實現如何,要強制進行字節對字節比較,您可以強制語言環境使用:strcoll()``memcmp()``strcmp()``uniq``C

LC_ALL=C uniq your-file

Vim 可以很好地做到這一點:

:g/\v^(.*\n)\1/d

或者,如果您更願意使用 vim 作為命令行工具,您可以這樣做

vim file -c "g/\v^(.*\n)\1/d" -c "wq"

這樣你就不必在以後與退出 vim 搏鬥了 ;)

解釋:

:g/

在與此正則表達式匹配的所有行上…

\v^(.*\n)\1

其後的任何一行…

/d

執行d刪除命令(刪除目前行)。這-c "wq"是保存更改並退出。

引用自:https://unix.stackexchange.com/questions/544887