【问题标题】:Shell script- How to get 50 from the sting "T=50"? [duplicate]Shell 脚本 - 如何从 sting "T=50" 中获得 50? [复制]
【发布时间】:2019-12-30 14:24:23
【问题描述】:

我需要从平面文件中获取尾数。 尾行如下所示:

"TC=10"

我用过:

cnt=${trcnt#*=}
cnt=${cnt%%,*}

但我得到的是 cnt = "10"。

请告诉正确的命令得到计数 10。

我需要从 "TC=10" 中提取 10

【问题讨论】:

  • 对于这个非常特殊的例子,一个简单的 grep 就可以完成这项工作:grep -o '[0-9]*'
  • @oguzismail :您自己删除的答案对我来说看起来不错。
  • 您的主题标题与实际的问题描述不同(并不是说它真的很重要,而是......为什么会造成混乱?;-))。祝你好运。

标签: string bash shell parsing


【解决方案1】:

匹配数字比删除不是数字的更好:

echo $trcnt | gawk '{match($0, /[0-9]+/); print substr($0, RSTART, RLENGTH)}'

How to extract a number from a string using Bash example

【讨论】:

    【解决方案2】:

    您可以使用awk 及其-F 选项来定义“字段分隔符”:

    | awk -F'=' '{print $2}' | awk -F'"' '{print $1}'
    

    这比其他替代方案更容易理解,并且非常可定制。 它对两个相似的条目很有用:

    echo "TC=10" | awk -F'=' '{print $2}' | awk -F'"' '{print $1}'
    echo "\"TC=10\"" | awk -F'=' '{print $2}' | awk -F'"' '{print $1}'
    

    另一个选项,与@shellter 写的内容有关:

    @oguzismail : 你自己删除的答案对我来说是正确的。

    答案是:

        $ trcnt='"TC=10"'
        $ cnt=${trcnt#*=} # remove everything till first =
        $ cnt=${cnt%\"}   # remove trailing "
        $ echo "$cnt"
        10
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-13
      • 1970-01-01
      • 2021-06-01
      • 1970-01-01
      • 2012-07-22
      • 1970-01-01
      • 2019-03-01
      • 2015-11-23
      相关资源
      最近更新 更多