3

私はファイル内に、一般に integer.integer という形式のコード番号の束を持っています。たとえば、123.45 または 12.345 と 12 はすべて有効なコード番号です。

sed を使用して、これらの各行を次のように変更したい

job{123}subjob{45}
job{12}subjob{345}
job{12}  

これまでのところ、

sed -e 's/codenumber{\([0-9]*\)\.*\([0-9]*\)}/job{\1}subjob{\2}/g'

その結果、

job{123}subjob{45}
job{12}subjob{345}
job{12}subjob{}

変数 \2 が空のときに、代わりにデフォルト値を出力することを sed が認識する方法はありますか。たとえば、0 とします。したがって、指定された例の最後の行は

job{12}subjob{0}

これは sed を 2 回実行することで可能になると思いますが、1 回で可能かどうかに興味があります。

4

4 に答える 4

3

コマンドを拡張して、sed空のサブジョブ番号を修正することができます。

sed -e 's/codenumber{\([0-9]*\)\.*\([0-9]*\)}/job{\1}subjob{\2}/g' \
    -e 's/subjob{}/subjob{0}/g'
于 2012-10-21T23:51:51.413 に答える
1

これはあなたのために働くかもしれません(GNU sed):

sed 's/codenumber/job/;s/\./}subjob{/;/subjob/!s/$/subjob{0}/' file
于 2012-10-21T23:52:04.167 に答える
1

これはsedでは不可能だと思います。しかし、実際には sed を 2 回実行できます (非常に高速なので問題にはなりません)。2 回目は

sed -e 's/subjob\{\}//g'
于 2012-10-21T20:01:35.373 に答える