ファイルから単語を削除できるPerl One linerについて知っている人がいます。たとえば、次のようなものがありますが、Linuxでは機能しません。
$ ssh root\@$host perl -p -e 's/value1/ /' -e 's/value2/ /' /tmp/file
答え1
標準出力に変更された出力を表示する代わりに内容を変更するには、ファイルを「所定の位置に」編集するオプションを使用する必要が/tmp/file
あります。詳細を表示して検索してください。perl
-i
man 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.bak
Perlによって編集される前にコピーされます。
を使用すると、これを簡単かつ少し早く実行できます(ループで何度も実行しない限り目立たない場合があります)。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コマンドを分離できます;
。