電子メールのリストを含むファイルがあり、各行に電子メールが含まれています。文字列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.
コメント
回答
POSIXly、grep:
grep -Eiv "(example|test)\.com" <in >out
コメント
- 入力と出力に同じファイルを使用しないように注意してください、または
grepが読み取る前に切り捨てられます。
回答
正規表現はexample.comにのみ一致し、sedはexample.comのみを空に置き換えますストリング。正規表現は、example.comまたはtest.comを含むすべての行と一致する必要があります
sed -i "s@.*\(test\|example\)\.com.*@@i" file.txt
コメント
- 回答は一致する行を削除しません。それらを空白にするだけです。 –大文字と小文字を区別しないテキストも処理しません(OP 'の例のように)。 –。
gは冗長で意味がありません。これは、sed 'の正規表現が貪欲であるため、意味がないためです。先頭と末尾の.*により、テキスト一致の最初の出現が行全体に一致します。 - フィードバックをありがとうございます。 'ケースの感度に注意を払っていません。
gは私の習慣です、あなたは正しいです、それは必要ではありません。また、OPが望んでいたのはブランキングラインだと思いました。これですべてが明確になりました。ありがとう
example(またはtest)の後に任意の文字を続け、次にcomを続けます。例echo 'exampleAcom' | sed '/example.com/d'