从字符串中检索匹配元素

时间:2012-10-05 06:48:00

标签: regex bash shell

使用bash我有一个包含我已部署的应用程序的字符串:

APPS="myapp-a-1.0.war myapp-b-1.1.war myapp-c-1.2-SNAPSHOT.war"

我可以确定是否部署了特定应用:

if [[ "$APPS" == *myapp-a* ]]
then
    echo "myapp-a is deployed, but we don't know the version."
fi

如果我只有单词前缀(应用程序名称,例如'myapp -a'),我如何检索完整的匹配单词(带有版本的应用程序)?

2 个答案:

答案 0 :(得分:1)

你可以循环你的变量(如果你不引用它):

for app in ${APPS}; do
  if [[ "${app}" == myapp-a* ]]; then
    echo ${app}
  fi
done

答案 1 :(得分:1)

简单如下:

if [[ "$APPS" =~ myapp\-a([^war]*)war ]]; then
  echo "${BASH_REMATCH[0]} deployed"
fi

结果:

myapp-a-1.0.war deployed

如果您只需要版本:

if [[ "$APPS" =~ myapp\-a([^war]*)war ]]; then
  echo "${BASH_REMATCH[1]} deployed"
fi

结果:

-1.0. deployed

如果您需要没有像破折号,点数这样的人工制品的版本:

if [[ "$APPS" =~ myapp\-a\-([^war]*)\.war ]]; then
  echo "${BASH_REMATCH[1]} deployed"
fi

结果:

1.0 deployed