
次のように複数のログファイルを生成しました。
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George Armani;Springfield
文字列を削除したいアルマーニしかし、私のコマンドは機能しません。
cat file.log | grep identifier | cut -d ";" -f | sort | uniq | grep -o '^\S*' > newfile.log
次の人をフォローしています。郵便はがき
別の方法がありますか?
PS。同じフィールドに長さの異なる文字列があります。
答え1
使用awk
:
awk -F\; 'OFS = ";"{ if ($4 ~ " "); split($4, fname, / /); $4=fname[1]; print }' input
これにより、4番目の列が空白に分割され、最初の要素に設定されます。
これは、4番目の列の内容に関係なく機能します。
$ cat input
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George Armani;Springfield
02/02/02;777;blabla;Jesse_b;South Park
03/03/03;888;blabla;test name;somewhere
$ awk -F\; 'OFS = ";"{ if ($4 ~ " "); split($4, fname, / /); $4=fname[1]; print }' input
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George;Springfield
02/02/02;777;blabla;Jesse_b;South Park
03/03/03;888;blabla;test;somewhere
答え2
ファイルから「Armani」テキストを削除するには、次のコマンドを使用します。
$ sed 's/Armani//' myfile
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George ;Springfield
$
その場で編集するには:
$ sed -i 's/Armani//' myfile
$ cat myfile
Date;Time;Brand;User;Node;Location
01/01/01;666;blabla;George ;Springfield
$
削除したい場合みんな「Armani」が1行に表示されたら、1つを追加してくださいg
。sed 's/Armani//g'
答え3
猫は意味がないので行くことができます。識別子は例示入力にないので、blablaを意味すると仮定する。あなたの姓を削除するためのあなたの要求は、例のコマンドとまったく関係がないようですので、これを変更してみましょう。
grep blabla file.log | perl -pe 's/ [^ ;]+;/;/g' > newfile.log
これがあなたの要件を満たしていない場合は、明確にするために質問を書き直す必要があります。