Perlを使用した条件付き置換

Perlを使用した条件付き置換

非常に単純な仮想の質問です。

限界に達し、条件付き置換のためのsedスクリプトsedperlsed

sed '/condition/ s/xx/yy/'

Perlでどのように実装しますか?

たとえば、Perlで次のことを行う方法は?

seq 6 > /tmp/tf

$ paste -d '' /tmp/tf /tmp/tf | sed -E '/[135]/s/^(.)(.)$/\1.\2-/'
1.1-
22
3.3-
44
5.5-
66

$ paste -d '' /tmp/tf /tmp/tf | perl -pe 's/$&/$1.$2-/ if /^([135])(.)$/'
.-
22
.-
44
.-
66

ベストアンサー1

目標は入力を減らし、Perlとsedsed

sed '/^\([135]\)\(.\)$/ s//\1.\2-/'
perl -pe '/^([135])(.)$/ && s//$1.$2-/'

コマンドの空s///の正規表現は、以前のテストの式(通常は最も近い一致式)を再利用します。

&&Perlでは、テストと交換の間に短絡文のように動作するように追加する必要がありますif。のsed最初の式は単に次のように動作します。住所交換コマンド。

一般的に言えば、

sed '/condition/ s/xx/yy/'

..."同じ"です(少し異なる構文と正規表現スタイルを考慮)。

perl -pe '/condition/ && s/xx/yy/'

ただし、この場合、代替項目を直接適用する方が簡単です。

sed 's/^\([135]\)\(.\)$/\1.\2-/'
perl -pe 's/^([135])(.)$/$1.$2-/'

おすすめ記事