実は私が使っているのは
sed -e s/Perro-A//g -i *-a.log
*-a.log で終わる多くのファイルから Perro-A 文字列を削除します。
しかし、時には私のファイルにPerro-Aがないかもしれません。 Perro-B、Perro-C、Perro-14、Perro-X、Perro-DHFNなどの文字列もあります。
「Perro」で始まる文字列を削除するには、前のコマンドを更新する必要があります。どうすればいいですか?
答え1
「Perro」で始まるすべての文字列を削除したい場合は、次のものを使用できます。
sed 's/Perro[^ ]*//g' *-a.log
ファイルをその場で編集するには、 で-i
オプションを使用できますsed
。
sed -i sed 's/Perro[^ ]*//g' *-a.log
修正する
複数のスペースを使用したくない場合は、次のものを使用できます。
sed -i sed 's/Perro[^ ]*//g' *-a.log | tr -s " "
サンプル、
rahul@rahul: cat a.log
Foo Perro-B Perro-C Bar
Perro-14 cmd Perro-X
Perro-DHFN abc xyz
aBcD Perro-14
rahul@rahul: sed 's/Perro[^ ]*//g' a.log | tr -s " "
Foo Bar
cmd
abc xyz
aBcD
答え2
たとえば、Perro-* という単語を次のスペースで削除するには、次のようにします。
sed -ie 's/Perro-.*\s//g' *-a.log
サンプル:
cat /tmp/foo
Prefix Perro-A Suffix
Pre Perro-B Suf
sed -ie 's/Perro-.*\s//g' /tmp/foo
cat /tmp/foo
Prefix Suffix
Pre Suf
sed は貪欲でないフィルタリングを処理しません。
perl
ジョブには別の方法が使用されます。
cat /tmp/foo
Prefix Perro-A c Perro-B Suffix
Perro-C Pre Suf Perro-D
perl -i -pe 's/Perro-.*?\s//g' /tmp/foo
cat /tmp/foo
Prefix c Suffix
Pre Suf
答え3
あなたの答えは何文字も残りませんでした。
sed -i -e 's/Perro.*//g' *-a.log
(-i
詳細については、編集中であることを読者ができるだけ早く理解できるようにするために前の内容を前に移動しました。)これにより、すべての文字列が削除されます。含む文字列 "Perro"の後に任意の数の文字(.*
)が続きます。
代わりに、次の文字列を削除するにはスタート「Perro」では、文字列を固定するだけです^
。
sed -i -e 's/^Perro.*//g' *-a.log
Lambertは、ここでの彼の説明では、上記のsedステートメントは行から文字列を削除しますが(現在空になる可能性があります)、行はそのまま残ります。代わりに、sedがPerroを含む行を削除するようにするには、正しい構文を使用してください。
sed -i -e '/Perro/d' *-a.log
...または同様に、次の場合は行を削除します。スタートフェローと一緒に:
sed -i -e '/^Perro/d' *-a.log