パターン マッチング後に sed の数値をインクリメントする方法はありますか
このファイルがあるとします
201 AD BBH NN
376 AD HGH JU
開始整数を一致させ、それに数字の 5 を追加したいsed
これは可能ですか
次のような、もう少し高度なツールを使用したほうがよいでしょうawk
。
pax$ cat qq.in
201 AD BBH NN
376 AD HGH JU
pax$ awk '{ print $0 " " $1+5 }' qq.in
201 AD BBH NN 206
376 AD HGH JU 381
もしあなたが本当にそれをしなければならないならsed
、はい、それはできます。しかし、それはお尻が醜いです。それを行う方法については、こちらを参照してください。
#!/usr/bin/sed -f
/[^0-9]/ d
# replace all leading 9s by _ (any other character except digits, could
# be used)
:d
s/9\(_*\)$/_\1/
td
# incr last digit only. The first line adds a most-significant
# digit of 1 if we have to add a digit.
#
# The tn commands are not necessary, but make the thing
# faster
s/^\(_*\)$/1\1/; tn
s/8\(_*\)$/9\1/; tn
s/7\(_*\)$/8\1/; tn
s/6\(_*\)$/7\1/; tn
s/5\(_*\)$/6\1/; tn
s/4\(_*\)$/5\1/; tn
s/3\(_*\)$/4\1/; tn
s/2\(_*\)$/3\1/; tn
s/1\(_*\)$/2\1/; tn
s/0\(_*\)$/1\1/; tn
:n
y/_/0/
この特定のスクリプトは数値に 1 を加算します。これで、私がこれを醜いと呼んだ理由が (うまくいけば) 理解できます。これをsed
金魚でやろうとすることは、カリの木を金魚で切り倒そうとすることに似ています。
仕事に適したツールを使用する必要があります。
awkで試すことができます
cat fileName | awk '{num = 0; if ($1 ~ /[0-9][0-9][0-9]/) num = $1 + 5; print num $1 $2 $3;}'