【问题标题】:Grep for a number of n digits after a string对字符串后的 n 位数进行 Grep
【发布时间】:2016-04-13 15:22:34
【问题描述】:
Release build trunk.965997 (965997) - 155mc13bcf03t - 2016-04-13T14:46:44.823+0000

我需要 grep 或从命令的输出中剪切(如上)并仅将输出设为 965997,而此数字只能是 6 或 7 位数字,但后面总是跟中继线。

【问题讨论】:

  • 你应该展示你的作品并询问什么是无效的。
  • 此数字在输出中出现两次。你想买哪一个?
  • 是你需要的结果吗? grep -E "trunk\.[0-9]{6,7}" | cut -d "(" -f 2 | cut -d ")" -f 1

标签: linux bash shell grep cut


【解决方案1】:

使用grep -oP

s='Release build trunk.965997 (965997) - 155mc13bcf03t - 2016-04-13T14:46:44.823+0000'
grep -oP 'trunk\.\K\d+' <<< "$s"

965997

即查找 trunk. 后跟 1 个或多个数字的文本。它使用\K 重置trunk. 之后的匹配信息,并仅打印后面的数​​字。

【讨论】:

    【解决方案2】:

    使用 sed:

    echo "Release build trunk.965997 (965997) - 155mc13bcf03t - 2016-04-13T14:46:44.823+0000" | sed -n 's/.*\.\([0-9]\{6,7\}\).*/\1/p'
    

    此外,如果您可以依赖此数字始终位于括号之间:

    sed -n 's/.*(\(.*\)).*/\1/p'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 2014-03-03
      • 1970-01-01
      • 2011-01-18
      • 2021-08-25
      • 2019-01-18
      相关资源
      最近更新 更多