web-dev-qa-db-ja.com

次の行が同じ場合は行を削除

どのsed/awkコマンドを使用できますか?ただsort -uはすべてのインスタンスを削除します

入力:

abc
abc
def
abc
abc
def

予想される出力:

abc
def
abc
def
15
干猕猴桃

それがuniq標準コマンドの目的です。

_uniq your-file
_

GNU uniqのような一部のuniq実装は、行のシーケンスの最初の同じソートバイト間で同一(ここでstrcoll()またはmemcmp()は0を返します)とは対照的に、strcmp()は0を返します)。 uniqの実装に関係なく、バイトからバイトへの比較では、ロケールを強制的にCに強制できます。

_LC_ALL=C uniq your-file
_
36

Vimはこれをうまく実現できます。

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

または、vimをコマンドラインツールとして使用する場合は、次のように実行できます。

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

このようにして、後でvimを終了することに取り組む必要がなくなります;)

説明:

:g/

この正規表現に一致するすべての行で...

\v^(.*\n)\1

それ自体が続くすべての行...

/d

d eleteコマンドを実行します(現在の行を削除します)。 -c "wq"は、変更を保存して終了します。

7
James