顧客のメールリストがありますが、.br で終わる一部のメールを削除したいと思います。私は通常、次のコマンドを実行します。
sed -i '/.br/d' customers.csv
ただし、これにより同様の顧客の電子メールも削除されます[email protected]
。
顧客の詳細の例は次のとおりです。
"Phone Number","[email protected]","NAME"
で終わる顧客の電子メールだけを削除する方法は.br
?
答え1
使用ミラー(mlr
)は、ファイルをヘッダーなしのCSVファイルに読み込み、.br
2番目のフィールドが次に終わらないレコードのみをフィルタリングするようにフィルタリングします。
mlr --csv -N filter '$2 !=~ "\.br$"' file
出力のすべてのフィールドを参照するには、--quote-all
後に追加します-N
。ヘッダーがある場合はそれを削除し、-N
代わりにヘッダー名を使用してください$2
(例:)$email !=~ "\.br$"
。
テスト:
$ cat file
"Phone Number","[email protected]","NAME"
"Phone Number2","[email protected]","NAME2"
"Phone Number3","[email protected]","NAME3"
"Phone Number","[email protected]","NAME"
"Phone Number","[email protected]","NAME.br"
$ mlr --csv -N filter '$2 !=~ "\.br$"' file
Phone Number,[email protected],NAME
Phone Number3,[email protected],NAME3
Phone Number,[email protected],NAME
Phone Number,[email protected],NAME.br
答え2
あなたは逃げなければなりません。.
これにより、「などの文字と一致しないように、どの文字とも一致しません。[Eメール保護].br
たとえば、次の項目を見つけることもできます。後ろに一つ@
。
努力する
sed -i '/".*\@[^"]*\.br"/d' customer.csv
実行例は次のとおりです。
~$ echo '"Phone Number","[email protected]","NAME"
> "Phone Number2","[email protected]","NAME2"
> "Phone Number3","[email protected]","NAME3"
> "Phone Number","[email protected]","NAME"
> "Phone Number","[email protected]","NAME.br"' > customers.csv
~$ cat customers.csv
"Phone Number","[email protected]","NAME"
"Phone Number2","[email protected]","NAME2" <-- should get deleted
"Phone Number3","[email protected]","NAME3"
"Phone Number","[email protected]","NAME"
"Phone Number","[email protected]","NAME.br"
~$ sed -i '/".*@.*\.br"/d' customer.csv
~$ cat customers.csv
"Phone Number","[email protected]","NAME"
"Phone Number3","[email protected]","NAME3"
"Phone Number","[email protected]","NAME"
"Phone Number","[email protected]","NAME.br"