使用命令sed将变量替换为正则表达式错误

时间:2018-02-04 16:35:32

标签: regex linux sed

当我学习关于sed的命令时,我发现了这个我无法解决的问题。我想要处理的txt如下:

myBook:test yetongxue$ cat test.txt 
    def IsNonce_strSet(self):
        """
        判断随机字符串是否存在
        @return true 或 false
        """
        return self._values.has_key('nonce_str')

这是我的命令和结果:

myBook:test yetongxue$ sed "s/return self._values.has_key\(\)/mark1 \1 mark2/g" test.txt 
    def IsNonce_strSet(self):
        """
        判断随机字符串是否存在
        @return true 或 false
        """
        mark1  mark2('nonce_str')

我很困惑mark2的位置,它应该在(' nonce_str')之后。 像这样:

  

mark1(' nonce_str')mark2

任何人都可以解释一下吗?非常感谢!

此外,如何将正则表达式白化,以便只匹配字符串 nonce_str 。 我的命令是:

  

sed" s / return self._values.has_key('()')/ mark1 \ 1 mark2 / g"的test.txt

但它没有用。

1 个答案:

答案 0 :(得分:4)

正则表达式\(\)匹配并捕获sed中的空字符串。

显然,您希望捕获一组文字括号及其间的文字?

sed ´s/return self\._values\.has_key\(([^()]*)\)/mark1 \1 mark2/'