我现在有这个正则表达式 它应该抓住这样的东西
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"
答案 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)
如果要匹配文字点,请使用.
。但是,您应该使用\.
,因为.
实际上是指正则表达式中的“任何字符”。