我有一个Java文件。我想评论包含匹配的任何代码行:
myvar
我认为sed应该帮助我
sed 's/myVar/not_sure_what_to_put_here/g' MyFile.java
我不知道该放什么:
not_sure_what_to_put_here
就像在这种情况下,我不想替换myVar但我想插入
//
到myVar出现的任何行的开头。
任何提示
答案 0 :(得分:39)
捕获包含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
的整行,当然forwardslashes需要转义为不要混淆sed
所以\/\/\1
还要注意括号除非使用sed
的扩展正则表达式选项,否则需要转义。
答案 1 :(得分:3)
尝试:
sed -n '/myVar/{s|^|//|};p' MyFile.java
表示:当某行包含myVar
时,请将该行的开头替换为//
。
答案 2 :(得分:2)
我正在研究相同的主题,并发现这个解决方案在正则表达式方面更简单
sed -e '/myvar/ s/^/\/\//' file
这会将//
添加到具有匹配模式的行的第0列。
但是,我正在寻找一种解决方案,它允许我在行的第一个字符之前添加一个字符(而不是在第0列)。