正则表达式不适用于Bash

时间:2017-06-30 07:18:37

标签: regex bash

我现在有这个正则表达式 它应该抓住这样的东西

org.package; version =“[1.0.41,1.0.51]”和“,”可选地,如果它不是最后一个元素。 另外如果在包之后我添加。*因为包可能是“org.package.util.something”直到“; version”

我在Regex工具中在网上尝试过,它就像这样工作

org.package(。*。*)+;版本=“[[0-9]。[0-9] [0-9] [0-9],\ S [0-9 ]。[0-9] [0-9] [0-9])”,吗

但我不知道应该改变什么,所以它可以在bash中使用

package="org.package" sed -i "s/"$$package.*;version="\[[0-9].[0-9].[0-9][0-9],[[:space:]][0-9].[0-9].[0-9][0-9]\)",?"//g" "$file"

2 个答案:

答案 0 :(得分:0)

用单引号更改双引号arround sed命令,因为$package单引号的变量扩展已关闭,双引号是使用循环变量

package="org.package"
sed -i 's/'"$package"'.*;version="\[[0-9].[0-9].[0-9][0-9],[[:space:]][0-9].[0-9].[0-9][0-9]\)",?//g' "$file"

在使用带-i选项的命令之前检查输出是否正确

答案 1 :(得分:0)

存在多个问题

  • $$将被bash替换为PID,这可能不是你想要的

  • 在线正则表达式评估程序通常使用扩展正则表达式 perl正则表达式语法
    sed -r将启用扩展正则表达式模式。 (对于grep,有-E和-P)

  • 如果要匹配文字点,请使用.。但是,您应该使用\.,因为.实际上是指正则表达式中的“任何字符”。