sed regex找到 - 替换版本号

时间:2014-03-17 11:55:07

标签: regex sed

我是sed的新手,试图编写一个脚本来查找/替换文件中的文本。文件(test.txt)看起来像这样;

   hello_world (1.2.0.123)

我发现这个脚本(我继承了):

sed -i 's/\(^\s*hello_world \)(.*)/\1hello_world (1.2.0.456)/' test.txt

正在导致;

   hello_world hello_world (1.2.0.456)

当我需要它时

   hello_world (1.2.0.456)

我不知道如何让第一部分只与括号匹配,我们将不胜感激。

修改

  • hello_world之前的空白很重要
  • 使用变量等自动生成sed行。我正在寻找一种方法来使这个正则表达式工作而不改变它。我必须使用的变量是

    • variable1:hello_world
    • variable2:hello_world(1.2.0.456)

(希望这些变量在sed表达式中很明显)

修改

我最后对此进行了分类,如果其他人有兴趣,请在下面回答。

2 个答案:

答案 0 :(得分:0)

搞定了

 sed -i 's/\(^\s*\)phoenix_utils (.*)/\1phoenix_utils (1.0.0.28583)/' test.txt

答案 1 :(得分:0)

sed -i -e 's/^\([[:blank:]]*hello_world \).*/\1(1.0.0.28583)/' YourFile

\1是第一个( )的内容所以\ 1Helloworld在你的样本中写了两次

根据-e或不依赖于转义内容(行为更改和非GNU sed经常需要转义(以进行分组模式)