Regex 找到匹配项时使用sed替换行首
我有一个Java文件。我想对包含匹配项的任何代码行进行注释:Regex 找到匹配项时使用sed替换行首,regex,sed,Regex,Sed,我有一个Java文件。我想对包含匹配项的任何代码行进行注释: myvar 我想塞德应该帮我 sed 's/myVar/not_sure_what_to_put_here/g' MyFile.java 我不知道该放什么进去: not_sure_what_to_put_here 在本例中,我不想替换myVar,但我想插入 // myVar出现在任何行的开头 任何提示都可以尝试: sed -n '/myVar/{s|^|//|};p' MyFile.java 这意味着:当一行包含myVa
myvar
我想塞德应该帮我
sed 's/myVar/not_sure_what_to_put_here/g' MyFile.java
我不知道该放什么进去:
not_sure_what_to_put_here
在本例中,我不想替换myVar,但我想插入
//
myVar出现在任何行的开头
任何提示都可以尝试:
sed -n '/myVar/{s|^|//|};p' MyFile.java
这意味着:当一行包含
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的/\(^.*myvar.*$\)/\/\/\/\1/'文件中的更改
说明:
( # 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
替换为前面有两个正斜杠的整行/\1
当然,正斜杠需要转义,以免混淆sed
所以\/\/\1
还请注意,括号需要转义,除非您使用sed
的扩展正则表达式选项 我在研究同一个主题,发现这个解决方案在正则表达式方面更简单
sed-e'/myvar/s/^/\/\/'文件
这会将/
添加到具有匹配模式的行的第0列
但是,我正在寻找一种解决方案,它允许我在行的第一个字符之前添加一个字符(不在第0列)。我在windwons上,|变为|,我得到:“|”不被识别为内部或外部命令,好的,那么您必须使用转义斜杠:sed-n'/myVar/{s/^/\/};p'MyFile.java
或者,如果操作系统没有提供引用文本字符串的方法,则将脚本放入文件中。不过,也许双引号而不是单引号会起作用。这看起来不错。你能解释一下你答案的逻辑吗?i、 e./(^.*etc做什么?太棒了!我只是想理解,而不仅仅是完成事情。答案很好。在一个单独的正则表达式中,我想检测行尾,我正在使用sed-i“s/cb$i$/cb$i$cb/”*/callback\u events
。但是我发现变量名必须包含字母数字字符的错误。
。你能帮我吗?到目前为止,下面的两个答案都可以帮你。我想提醒你,你必须改进你的模式“myvar”,以避免发生意外的替换。例如,所有包含“myVariable或myVarList或myVarMap或Object obj=new Object;//myVar in comment”将被注释掉。@这是一个很好的观点。它应该尽可能的紧凑。