30

我有一个 Java 文件。我想评论任何包含匹配的代码行:

 myvar

我认为 sed 应该在这里帮助我

 sed 's/myVar/not_sure_what_to_put_here/g' MyFile.java

我不知道该放什么:

not_sure_what_to_put_here

在这种情况下,我不想替换 myVar 但我想插入

//

到发生 myVar 的任何行的开头。

有小费吗

4

3 回答 3

48

捕获包含以下内容的整行myvar

$ sed 's/\(^.*myvar.*$\)/\/\/\1/' file

$ cat hw.java
class hw {
    public static void main(String[] args) {
        System.out.println("Hello World!"); 
        myvar=1
    }
}

$ sed 's/\(^.*myvar.*$\)/\/\/\1/' hw.java
class hw {
    public static void main(String[] args) {
        System.out.println("Hello World!"); 
//        myvar=1
    }
}

使用该-i选项保存文件中的更改sed -i 's/\(^.*myvar.*$\)/\/\/\1/' file

解释:

(      # Start a capture group
^      # Matches the start of the line 
.*     # Matches anything 
myvar  # Matches the literal word 
.*     # Matches anything
$      # Matches the end of the line
)      # End capture group 

所以这会查看整行,如果myvar找到存储在第一个捕获组中的结果,称为\1. 因此,我们将整行替换为\1前面有 2 个正斜杠的整行//\1,当然正斜杠需要转义以免混淆sed,因此\/\/\1还要注意括号需要转义,除非您使用扩展的正则表达式选项sed

于 2013-01-03T10:53:46.133 回答
4

尝试:

sed -n '/myVar/{s|^|//|};p' MyFile.java

这意味着:当一行包含 时myVar,将行的开头替换为//

于 2013-01-03T10:52:13.170 回答
3

我正在研究相同的主题,发现这个解决方案在正则表达式方面更简单

sed -e '/myvar/ s/^/\/\//' file

这将添加//到具有匹配模式的行的第 0 列。

但是,我正在寻找一种解决方案,它允许我在该行的第一个字符之前添加一个字符(而不是在第 0 列)。

于 2015-11-29T15:27:49.157 回答