从shell脚本中的字符串中提取子字符串

时间:2015-07-30 22:28:49

标签: regex shell

$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 matchessadds.dsdsds.21212.anything-anything

需要从DMJK开始,然后才能提取#34; .tgz"或" .tar"或" tar.bz2",

在上述情况下,

o / p应为DMJK.UK.1.0-32133-Z-1。

main String可以是包含格式

的任何内容

" anything.anything-DMJK.XXX。[] 0-9]。[0-9]。[0-9] -3213309- [AZ] - [0-9] .tar.tgz什么"

飞行中的变化,o / p可能是DMJK.XXX.1.3.0-3213309-Z-13

我试过但它不起作用:

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

1 个答案:

答案 0 :(得分:0)

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

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

(好吧,有点。在.tar.bz5的字符串中,这可能无法正常工作。但是,在这种情况下你想做什么并不完全清楚。)