0

パターン マッチング後に sed の数値をインクリメントする方法はありますか

このファイルがあるとします

201 AD BBH NN
376 AD HGH JU

開始整数を一致させ、それに数字の 5 を追加したいsed

これは可能ですか

4

2 に答える 2

3

次のような、もう少し高度なツールを使用したほうがよいでしょう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金魚でやろうとすることは、カリの木を金魚で切り倒そうとすることに似ています。

仕事に適したツールを使用する必要があります。

于 2013-02-04T06:23:30.213 に答える
0

awkで試すことができます

cat fileName | awk '{num = 0; if ($1 ~ /[0-9][0-9][0-9]/) num = $1 + 5; print num $1 $2 $3;}'
于 2013-02-04T06:24:11.120 に答える