顧客ドメイン名拡張子(.csvファイル)のみを削除してください。

顧客ドメイン名拡張子(.csvファイル)のみを削除してください。

顧客のメールリストがありますが、.br で終わる一部のメールを削除したいと思います。私は通常、次のコマンドを実行します。

sed -i '/.br/d' customers.csv

ただし、これにより同様の顧客の電子メールも削除されます[email protected]

顧客の詳細の例は次のとおりです。

"Phone Number","[email protected]","NAME"

で終わる顧客の電子メールだけを削除する方法は.br

答え1

使用ミラーmlr)は、ファイルをヘッダーなしのCSVファイルに読み込み、.br2番目のフィールドが次に終わらないレコードのみをフィルタリングするようにフィルタリングします。

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"

関連情報