【问题标题】:Evaluate variable to integer with sed使用 sed 将变量计算为整数
【发布时间】:2011-12-05 14:48:11
【问题描述】:

对于知道的人来说,这很容易。我快完成这个命令了

echo VERSION=1.0 | sed 's/^VERSION=\([0-9]\).\([0-9]\)/VERSION=\1.\2+1/'

我只想写VERSION=1.1。如何将\2 评估为整数并求和 +1..

【问题讨论】:

  • 为什么是sed? awk/perl/python/ruby/.. ?
  • 我正在学习如何使用 sed(看书)。我开始理解它了 :)
  • 我明白了.. 所以现在你只有一把锤子? :) sed.sourceforge.net/grabbag/scripts/dc.sed

标签: bash sed echo sh


【解决方案1】:

当然 sed 可以做到这一点。这就是 e 的用途。您可以使用“e”将匹配/替换的字符串传递给 shell 命令

查看基于您的 sed 行的示例:

kent$  echo VERSION=1.0 | sed 's/^VERSION=\([0-9]\).\([0-9]\)/echo "VERSION=\1.$((\2+1))"/e'                                             
VERSION=1.1

【讨论】:

  • 不错,不知道sed能做到这一点!
  • 这不是一个常见的选择。在这种情况下,awk 更好。为了好玩,可以在一个 sed 脚本 /e 到另一个 sed 脚本,然后是另一个 sed ......我在 4 次以上嵌套后做了一次,我不知道我在哪里......
  • 我使用的是 Mac OS X Lion 终端和 sh 3.2,但它不起作用,是我的错还是它只能在 linux 中运行?,它给了sed: 1: "s/^VERSION=\([0-9]\).\( ...": bad flag in substitute command: 'e'
  • @Rodrigo 我没有mac,所以我无法进行测试。该命令适用于 GNU sed 4.2.1 的 bash/zsh。在我的 linux 机器上。而且我认为 sed 版本号应该不是问题,我在较低版本中使用了“e”。你是 sed gnu 吗?
  • 末尾的 e 标志是 GNU 扩展。
【解决方案2】:

您可以使用bc 命令:

echo VERSION=`echo "1.0 + 0.1" | bc`

结果:

VERSION=1.1

man bc

echo "VERSION="`echo "v=1.0; v+=0.1; v" | bc` > myFile.txt
cat myFile.txt

VERSION=1.1

【讨论】:

  • 这是一个愚蠢的问题,但是我使用这个命令来编写一个文件,那么我如何才能将该行与这个集成。因为我的变量在\2 所以,我该怎么做呢?这不是一种普通的编程语言:)
  • 您可以将版本号设置为任何变量,然后回显该变量 + 0.1 并将其通过管道传输到 bc 并将输出重定向到文件。我会更新我的答案以显示一个例子
  • VERSION的初始值从何而来?
  • 从我的文本文件中保存版本号。这将始终增加并再次保存在文件中。
【解决方案3】:

Crpytic 答案 - 如何使用整个工具包:

x='VERSION=1.0'
echo -n $x | sed 's/\..*/./'; expr `echo $x | grep -o '\..*' | cut -c 2-` + 1

【讨论】:

    猜你喜欢
    • 2013-07-06
    • 2017-09-16
    • 2017-02-27
    • 2021-08-20
    • 2010-11-27
    • 1970-01-01
    • 2016-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多