【问题标题】:Extract a substring from a string in shell script从shell脚本中的字符串中提取子字符串
【发布时间】:2015-07-30 22:28:49
【问题描述】:
$sea = xyz-ajay-no-siddhart-ubidone-fdh-DMJK.UK.1.0-32133-Z-1.tgz

我只想提取第一次出现的 DMJK.UK.1.0-32133-Z-1,并且搜索字符串将以 DMJK 开头。

$sea = anything-anything.xyz-ajay-no-siddhart-ubidone-fdh-DMJK.UK.1.0-32133-Z-1.tgz matchessadds.dsdsds.21212.anything-anything

或 $sea =anything-anything.xyz-ajay-no-siddhart-ubidone-fdh-DMJK.UK.1.0-32133-Z-1.tar.bz2 匹配sadds.dsdsds.21212.anything-anything

需要从 DMJK 和“.tgz”或“.tar”或“tar.bz2”之前提取,

o/p 在上述情况下应该是 DMJK.UK.1.0-32133-Z-1。

主字符串可以是任何包含格式的字符串

“anything.anything-DMJK.XXX.[]0-9].[0-9].[0-9]-3213309-[A-Z]-[0-9].tar.tgz 任何东西”

即时更改,o/p 可以是 DMJK.XXX.1.3.0-3213309-Z-13

我试过了,但它不起作用:

echo $sea | sed 's#.*(DMJK.*).t*#\1#g'

【问题讨论】:

    标签: regex shell


    【解决方案1】:

    有更好的方法可以做到这一点,但您可以通过以下方式修复当前的解决方案:

    sed -E 's#.*(DMJK.*)\.(tgz|tar.bz2|tar)#\1#g'
    

    (嗯,有点。这可能无法在带有 .tar.bz5 的字符串上按预期工作。不过,在这种情况下你想做什么并不完全清楚。)

    【讨论】:

    • 为什么 o/p 即将到来链接 DMJK.UK.1.0-32133-Z-1 匹配
    • o/p 即将链接,因为匹配重新设计。 (?) 使用 -E 告诉 sed 使用扩展的正则表达式,因此该模式匹配 DMJK,后跟 antyhing(即第一组),后跟“tgz”、“tar.bz2”或“tar”中的任何一个。 (请注意,“tarxbz2”也匹配,因为 '.' 是一个元字符,但整个字段都是多余的,因为它匹配 'tar')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-12
    • 2012-12-28
    • 2011-07-21
    • 1970-01-01
    • 2019-12-10
    相关资源
    最近更新 更多