電子メールのリストを含むファイルがあり、各行に電子メールが含まれています。文字列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'