ファイル内の特定のテキストを含む行を削除する

電子メールのリストを含むファイルがあり、各行に電子メールが含まれています。文字列example.comまたはtest.comを含む行を削除したい。

これを試した:

sed -i "s/example\.com//ig" file.txt 

ただし、文字列example.comのみが削除されます。行全体を削除するにはどうすればよいですか?

回答

GNU sedの場合:

sed "/example\.com/d;/test\.com/d" -i file.txt 

およびtest.com

man sedから:

d Delete pattern space. Start next cycle. 

コメント

  • これにより、example(またはtest)の後に任意の文字を続け、次にcomを続けます。例echo 'exampleAcom' | sed '/example.com/d'
  • ああ、ぼんやりとぼんやりとドットを逃がさないで。気づいてくれてありがとう!

回答

POSIXly、grep

grep -Eiv "(example|test)\.com" <in >out 

コメント

  • 入力と出力に同じファイルを使用しないように注意してください、またはgrepが読み取る前に切り捨てられます。

回答

正規表現はexample.comにのみ一致し、sedexample.comのみを空に置き換えますストリング。正規表現は、example.comまたはtest.comを含むすべての行と一致する必要があります

sed -i "s@.*\(test\|example\)\.com.*@@i" file.txt 

コメント

  • 回答は一致する行を削除しません。それらを空白にするだけです。 –大文字と小文字を区別しないテキストも処理しません(OP 'の例のように)。 –。 gは冗長で意味がありません。これは、sed ‍ 'の正規表現が貪欲であるため、意味がないためです。先頭と末尾の.*により、テキスト一致の最初の出現が行全体に一致します。 ‍
  • フィードバックをありがとうございます。 'ケースの感度に注意を払っていません。 gは私の習慣です、あなたは正しいです、それは必要ではありません。また、OPが望んでいたのはブランキングラインだと思いました。これですべてが明確になりました。ありがとう

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です