Perl 1ライナーエラー - 機能しない - 複数の文字列を削除する

Perl 1ライナーエラー - 機能しない - 複数の文字列を削除する

ファイルから単語を削除できるPerl One linerについて知っている人がいます。たとえば、次のようなものがありますが、Linuxでは機能しません。

$ ssh root\@$host perl -p -e 's/value1/ /' -e 's/value2/ /' /tmp/file

答え1

標準出力に変更された出力を表示する代わりに内容を変更するには、ファイルを「所定の位置に」編集するオプションを使用する必要が/tmp/fileあります。詳細を表示して検索してください。perl-iman perlrun-i

また、変数を使用するときは、参照変数を使用してください(例$host:)。

ところで、2つの異なるパターンを同じ値(空白)に変更しています。 2つの別々の作業は必要ありませんs///

ssh "root@$host" perl -p -i -e 's/value1|value2/ /' /tmp/file

実際には、2つの異なる操作が必要な場合でも、;セミコロン()で区切ることができます。

ssh "root@$host" perl -p -i -e 's/value1/foo/;s/value2/bar/' /tmp/file

ソースファイルのバックアップコピーを作成するには、オプションの-iサフィックスを使用します。例えば

ssh "root@$host" perl -p -i.bak -e 's/value1|value2/ /' /tmp/file

/tmp/file/tmp/file.bakPerlによって編集される前にコピーされます。


を使用すると、これを簡単かつ少し早く実行できます(ループで何度も実行しない限り目立たない場合があります)。sedこれにも同じ-iオプションがあります。

からman sed

-i[サフィックス]、--in-place[=サフィックス]

ファイルを所定の位置に編集(またはサフィックスが指定されている場合はバックアップ)

ssh "root@$host" sed -i -e 's/value1\|value2/ /' /tmp/file

または、sedの-E拡張正規表現(ERE)オプションを使用してください。

ssh "root@$host" sed -i -E -e 's/value1|value2/ /' /tmp/file

ところで、perlのようにを使用して複数のsedコマンドを分離できます;

関連情報