【问题标题】:How to increment a variable caught with sed?如何增加 sed 捕获的变量?
【发布时间】:2013-02-22 13:52:19
【问题描述】:

我有一个 sed 脚本可以捕捉到短语 objID="x",其中 x 可以是任何正整数。

我想将它增加一个常数值,比如说整个文件中的 100。我怎样才能做到这一点?

sed 's/objID="\(\d\)"/objID="\1"/g

我应该改变什么?

【问题讨论】:

  • gnu sed 可以做到,但是 awk、perl 会更容易。 sed 是必须的吗?
  • @Kent sed 不是必须的。这只是我最了解的一个工具(在其他工具中,例如 awk

标签: shell replace sed increment


【解决方案1】:

尝试这样做:

$ echo 'objID="1"' |
    perl -pe 's/(objID=")(\d+)(")/sprintf "%s%s%s", $1, $2+1, $3/ge'
objID="2"

$ echo 'objID="1"' | awk -F'"' '/objID=/{print $1 $2+1 $3}'
objID="2"

【讨论】:

  • perl 示例工作但很好,但 awk 不适用于包含更多 "s 的行。
【解决方案2】:

正如我所评论的,awk、perl 会更轻松地完成这项工作,但是如果 sed 是必须的,请查看以下示例:

(需要Gnu Sed

kent$  echo 'objID="7"'|sed -r 's/(objID=")([0-9]+)(")/echo \1$((100+\2))\3/ge'
objID=107 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 2017-07-03
    • 2015-09-21
    相关资源
    最近更新 更多