非常に単純な仮想の質問です。
限界に達し、条件付き置換のためのsed
スクリプトsed
をperl
。sed
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とsed
。sed
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-/'