Swi*_*coa 5 bash shell awk sed
我想在一堆源文件中搜索一个模式。该模式应充当标记。如果找到模式,我想通过执行另一个字符串的替换来处理该行
例如:
Private const String myTestString = @"VAL15"; // STRING—REPLACE-VAL##
Run Code Online (Sandbox Code Playgroud)
在这里,我想在我的源文件中搜索模式STRING—REPLACE-VAL
,然后替换VAL15
为VAL20
相同的。
输出:
private const String myTestString = @"VAL20"; // STRING—REPLACE-VAL##
Run Code Online (Sandbox Code Playgroud)
尝试了下面的命令,但没有按预期工作。
sed -i '/,STRING—REPLACE-VAL##/ {; s/,VAL15,/,VAL20,/;}' myTestFile.cpp
Run Code Online (Sandbox Code Playgroud)
问题:是否可以在同一行中搜索STRING—REPLACE-VAL##
然后搜索匹配模式@"VAL
??" 并将 15 替换为 20。
sed
支持搜索和替换相同的模式很容易,但不确定是否sed
支持搜索模式但替换匹配行中的另一个字符串?
任何帮助,将不胜感激。提前致谢。
你们非常接近:
\n\nsed -i \'/STRING\xe2\x80\x94REPLACE-VAL##/{s/VAL15/VAL20/}\' myTestFile.cpp\n
Run Code Online (Sandbox Code Playgroud)\n\n在您的原始文件中,您试图替换",VAL15,"
,但该字符串不在行中(逗号)。此外,您的搜索字符串也会发生同样的情况",STRING\xe2\x80\x94REPLACE-VAL##"
。
我还想到STRING
和之间的第一个连字符REPLACE
是破折号而不是标准-
,也许这是另一个问题。确保字符串完全相同。如果您不确定破折号,您可以使用
sed -i \'/STRING.REPLACE.VAL##/{s/VAL15/VAL20/}\' myTestFile.cpp\n
Run Code Online (Sandbox Code Playgroud)\n\n并回答您的问题,是的,您可以尝试通过以下方式进行多次匹配:
\n\nsed
:
sed -i \'/STRING.REPLACE.VAL##/{ /@"VAL/ { s/VAL15/VAL20/ } }\' myTestFile.cpp\n
Run Code Online (Sandbox Code Playgroud)\n\nawk
:
awk \'/STRING.REPLACE.VAL##/&&/@"VAL/{sub("VAL15","VAL20")}1\' myTestFile.cpp\n
Run Code Online (Sandbox Code Playgroud)\n