【问题标题】:How to use sed to get the required output?如何使用 sed 获得所需的输出?
【发布时间】:2016-08-22 17:50:46
【问题描述】:

这是我的字符串:

<InstalledVersion Name="xyz" version="5" identifier="6.3.0.00.267" supportData="A002-IBY03" supportRelease="6.3" versionCode="xyz/abc/267"></InstalledVersion>

我想要的输出是 203。A002 的最后一个字符和 IBY03 的最后两个字符。因此输出为 203。
我正在使用sed 's/.*supportData="A\([0-9]\+[-][A-Z]\+[0-9]\+\)".*/\1/' | cut -c3,8,9'.
这给了我正确的输出,但我想知道我是否可以通过 sed 直接做到这一点。
任何帮助,将不胜感激。 谢谢

【问题讨论】:

    标签: regex string bash unix sed


    【解决方案1】:

    你可以使用这个 sed 命令:

    s='<InstalledVersion Name="xyz" version="5" identifier="6.3.0.00.267" supportData="A002-IBY03" supportRelease="6.3" versionCode="xyz/abc/267">'
    
    sed -E 's/.*supportData="[^"]*([0-9])-[^"]*([0-9]{2})".*/\1\2/' <<< "$s"
    

    输出:

    203
    

    【讨论】:

    • 谢谢 这工作但不知何故我的整个字符串。我的整个字符串是 ''
    • 完成。请检查
    • 真的很抱歉再次编辑字符串这工作只是字符串的一个小改动非常感谢您的帮助
    • 我用你更新的输入进行了测试,这个命令仍然输出203
    • 我得到 203 和
    【解决方案2】:

    试试这个:

    $ var='supportData="A002-IBY03"'
    $ sed -r 's/.*([0-9])-.*([0-9][0-9])"/\1\2/' <<<$var
    203
    

    【讨论】:

      【解决方案3】:

      你可以这样使用:

      $ echo '<InstalledVersion Name="xyz" version="5" identifier="6.3.0.00.101" supportData="A002-IBY03" supportRelease="6.3" versionCode="xyz/abc/267">' | sed -r 's/^.*supportData=".{3}([0-9])-.{3}([0-9]{2}).*$/\1\2/'
      203
      $
      

      【讨论】:

        猜你喜欢
        • 2013-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-05-12
        • 2021-05-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多