有什么方法可以在模式匹配后在sed中增加一些数字
假设我有这个文件
201 AD BBH NN
376 AD HGH JU
我想匹配起始整数,然后在sed
这可能吗
答案 0 :(得分: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
中这样做,那么,是的,它可以完成。但这很丑陋。请参阅here了解相关操作方法:
#!/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
做这件事就像试图用金鱼砍伐卡里树一样。
您应该使用正确的工具来完成工作。
答案 1 :(得分:0)
用awk你可以尝试
cat fileName | awk '{num = 0; if ($1 ~ /[0-9][0-9][0-9]/) num = $1 + 5; print num $1 $2 $3;}'