ファイルから変数文字列を削除する方法

ファイルから変数文字列を削除する方法

実は私が使っているのは

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

関連情報