特定の文字列を含む行を1つだけ削除する方法

特定の文字列を含む行を1つだけ削除する方法

こんにちは質問があります。あちこちで検索してみましたが見つかりません。

sedコマンドを使用して、特定の文字列を含む行を削除したいと思います。テキストファイルには同じ文字列を含む行があります。 sedコマンドは最初の文字列のみを削除し、残りは削除しないでください。どうすればいいですか?同じ文字列が不足するまで何度もアクティブになるシェルスクリプトでこれを使用します。

たとえば、次の行があります。

aaa 
aaa 
aaa 
bbb 
ccc 

行1つだけ削除したい aaa

答え1

より簡単なことは次のとおりですawk

awk '!/aaa/ || n++' < your-file

現在のレコードが含まれていない場合は印刷するかaaa、含まれている場合は一部のカウンタをゼロ以外の値に事後インクリメントします(最初の発生後に発生します)。

GNUを使用すると、sed次のことができます。

sed '0,/aaa/{//d}' < your-file

aaaファイルの先頭から最初に表示される行までの行範囲に属する行のみを削除しますaaa

よりsed FAQGNU以外のsedに対して可能な他の方法。

関連情報