現在、次の方法を使用して、以下を含むすべてのメールを削除します。EXAMPLE
sed -i '/EXAMPLE/d' newname.csv
EXAMPLE
ただし、これによりすべての列の行が削除されます。EXAMPLE
2番目の列に含まれる行だけを削除したいと思います。列はタブで区切られます。 (下記例)
pa**s-***c.com support@n**.com George Ka*****os Athens Athens 1**** GREECE
タブの問題のために試してみましたが、操作中に何も機能しなかったため、.txtを上書きし、列は次のようになります。
"pak**o.asia","jav***[email protected]","T**iq Ja**id","Rajan Pur","punjab","33***0","PAKISTAN"
答え1
grep -v '^[^\t]*\t[^\t]*EXAMPLE' <newname.csv >outfile
しかし、テキストを使用する必要があるかもしれません。<タブ>そこにある文字は、grep
使用する文字によって異なります。
以下も同様ですsed
。使用すると、-i
特定のファイルシステムのセキュリティリスクが発生することに注意してください。
sed -i '/^[^\t]*\t[^\t]*EXAMPLE/d' ./file
それとも少し難しいかもしれません。
sed -i 'h;s/\t/\n/2;/\t.*EXAMPLE.*\n/d;g' ./file
コンマ付きのデータの例:
sed -i '/^[^,]*,[^,]*EXAMPLE/d' ./file
全行を削除EXAMPLE
最初のカンマの後と別のコンマの前に発生します。
答え2
Perlを使用すると、次のように簡単にできます。
#!/usr/bin/perl;
use strict;
use warnings;
while (<>) {
print unless ( split )[1] =~ m/EXAMPLE/;
}
これは固定されていない正規表現なので、置き換える必要があるかもしれませんm/^EXAMPLE$/
。
これは単に次のように表現できます。
perl -ne 'print unless ( split )[1] =~ m/^EXAMPLE$/';
答え3
これらの操作は、awk
awkに内部ファイル編集機能がないことを除いて、実際に使いやすく理解しやすいです。
$ awk '$2 !~ /EXAMPLE/ {print $ALL}' old.csv > new.csv