2017-06-30 43 views
-1

工作,我有这样的正则表达式现在 它应该抓住这样的事情正则表达式不猛砸

org.package;版本=“[1.0.41,1.0.51)”和“”任选如果这不是最后一个元素。 此外,如果包后我加*,因为包可能是“org.package.util.something”,直到“;版本”

我在正则表达式工具在线试了一下,它是这样工作

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

查看https://ideone.com/UnB1zq –

+1

这里的最终目标是什么?要查找并输出版本或替换它? – Jay

+0

如果我有org.package; version =“[1.0.41m 1.0.5其他数字可能在下一行,甚至只尝试用这个例子在5和1之间添加[[:space:]] *它不起作用 –

回答

0

更改用单引号双引号角落找寻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选项命令之前检查输出是否正确

+0

谢谢你和其他的东西 - 如果我想在每个字符之前检查0或更多的空格,我需要在每个字符前添加[[; space:]] *。 –

+0

@КалоянНиков:是的,但你应该添加'[[:space:]] *'。 –

+0

我试过这个,但它变得很难看,并说不匹配的sed:-e表达式#1,字符435:无法匹配)或\): '[[:space:]] *。* [[:space:]] *; [[ [:空间:]] * v [[:空间:]] * E [[:空间:]] * R [[:空间:]] * S [[:空间:]] * I [[:空间:] ] *问题o [[:空间:]] * N [[:空间:]] * = [[:空间:]] *“[[:空间:]] * \ [[[:空间:]] * [0 -9] [[:空间:]] * [[:空间:]] * [0-9] [[:空间:]] * [[:空间:]] * [0-9] [[:空间:]] * [0-9] [[:空间:]] *,[[:空间:]] * [0-9] [[:空间:]] * [[:空间:]] * [ 0-9] [[:空间:]] *。[0-9] [[:空间:]] * [0-9] [[:空间:]] * \)[[:空间:]] *” [[:space:]] *,?// g'“file”' –

0

有一个以上的问题

  • $$将其PID的bash来代替,这可能不是你想要

  • 网上的regex评估通常采用扩展的正则表达式perl的什么正则表达式语法
    sed -r将启用扩展正则表达式模式。 (对于grep,存在-E和-P)

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

+0

我跑 'sed -i -r's /'“$ package”'\ s *([az] * \。* \ s *)* \ s *; \ s * v \ s * e \ s * r \ s * S \ S * I \ S *○\ S * N \ S * = \ S *“\ S * \ [\ S * [0-9] \ S * \ S * [0-9] \ S * \ S * [0-9] \ S * [0-9] \ S *,\ S * [0-9] \ S * \ S * [0-9] \ S * \ S * [0 -9] \ s * [0-9] \ s * \)\ s *“\ s *,?// g'”$ file“'在线工具中使用相同的正则表达式,我得到匹配 –

+0

也'我'll需要在$包中添加空格,但是在这种情况下它不起作用 –

+0

我不认为点是问题。无论如何,我把它移除了,不像Regexr那样工作 –