【问题标题】:How to use sed or awk to extract substring如何使用 sed 或 awk 提取子字符串
【发布时间】:2018-10-17 21:38:16
【问题描述】:

我有一个包含以下内容的文件:

[class:ABC_DEF_GHI]
[class:ABC_DEF_GHI:app:ABC_DEF_GHI]

我的目标是提取 ABC_DEF_GHI

这是我目前正在尝试编写的脚本。

eval sed -n 's/.*app://p' file.txt >> $file

【问题讨论】:

  • 请期待输出。
  • 使用grep -Po ':\K[^:]+(?=]$)'
  • 您的要求不清楚:文件有3个相等的子字符串ABC_DEF_GHI,您想要哪一个?您自己的解决方案建议使用最后一个解决方案,并且在您删除 eval 时应该可以工作(或通过将额外的 :.*:app: 匹配来改进)。
  • 是的,有三个相同的子字符串。我只需要一个。我只是选择了第二行,因为我发现它更容易。我的解决方案提取 ABC_DEF_DHI],但我想剪切最后一个字符 ']'。你能帮我解决一下吗?

标签: regex bash shell awk sed


【解决方案1】:

您可以通过在awk中使用多个分隔符来获取此值:

awk  -F':|]' '{print $2}' $file

【讨论】:

    【解决方案2】:

    sed

    $ sed -E 's/.*:(.+)]/\1/' file
    ABC_DEF_GHI
    ABC_DEF_GHI
    

    在冒号和右方括号之间提取内容,由于贪婪匹配,它将是最后一个冒号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-05
      • 2013-05-16
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 2013-04-09
      • 1970-01-01
      相关资源
      最近更新 更多