我有一个 Java 文件。我想评论任何包含匹配的代码行:
myvar
我认为 sed 应该在这里帮助我
sed 's/myVar/not_sure_what_to_put_here/g' MyFile.java
我不知道该放什么:
not_sure_what_to_put_here
在这种情况下,我不想替换 myVar 但我想插入
//
到发生 myVar 的任何行的开头。
有小费吗
捕获包含以下内容的整行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
。
尝试:
sed -n '/myVar/{s|^|//|};p' MyFile.java
这意味着:当一行包含 时myVar
,将行的开头替换为//
。
我正在研究相同的主题,发现这个解决方案在正则表达式方面更简单
sed -e '/myvar/ s/^/\/\//' file
这将添加//
到具有匹配模式的行的第 0 列。
但是,我正在寻找一种解决方案,它允许我在该行的第一个字符之前添加一个字符(而不是在第 0 列)。