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 回答