我想在一堆源文件中搜索一个模式。该模式应充当标记。如果找到模式,我想通过执行另一个字符串的替换来处理该行
例如:
Private const String myTestString = @"VAL15"; // STRING—REPLACE-VAL##
在这里,我想在我的源文件中搜索模式 STRING—REPLACE-VAL
,然后将 VAL15
替换为 VAL20
。
输出:
private const String myTestString = @"VAL20"; // STRING—REPLACE-VAL##
尝试了以下命令但没有按预期工作。
sed -i '/,STRING—REPLACE-VAL##/ {; s/,VAL15,/,VAL20,/;}' myTestFile.cpp
问题是否可以搜索STRING—REPLACE-VAL##
,然后搜索匹配的模式@"VAL
?? “在同一行并将 15 替换为 20。
sed
支持搜索和替换相同的模式非常容易,但不确定 sed
是否支持搜索模式但替换匹配行中的另一个字符串?
如有任何帮助,我们将不胜感激。提前致谢。
最佳答案
你们非常亲密:
sed -i '/STRING—REPLACE-VAL##/{s/VAL15/VAL20/}' myTestFile.cpp
在您原来的代码中,您试图替换 ",VAL15,"
但该字符串不在行中(逗号)。此外,您的搜索字符串 ",STRING—REPLACE-VAL##"
也会发生同样的情况。
我还想到 STRING
和 REPLACE
之间的第一个连字符是 em-dash 而不是标准的 -
,也许这个是另一个问题。确保字符串完全相同。如果您不确定破折号,您可以使用
sed -i '/STRING.REPLACE.VAL##/{s/VAL15/VAL20/}' myTestFile.cpp
并回答您的问题,是的,您可以尝试通过以下方式进行多场比赛:
sed
:
sed -i '/STRING.REPLACE.VAL##/{ /@"VAL/ { s/VAL15/VAL20/ } }' myTestFile.cpp
awk
:
awk '/STRING.REPLACE.VAL##/&&/@"VAL/{sub("VAL15","VAL20")}1' myTestFile.cpp
关于bash - 在文件中搜索模式并替换同一行中的另一个模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49432797/