在文件中搜索模式并替换同一行中的另一个模式

Swi*_*coa 5 bash shell awk sed

我想在一堆源文件中搜索一个模式。该模式应充当标记。如果找到模式,我想通过执行另一个字符串的替换来处理该行

例如:

Private const String myTestString = @"VAL15"; // STRING—REPLACE-VAL##
Run Code Online (Sandbox Code Playgroud)

在这里,我想在我的源文件中搜索模式STRING—REPLACE-VAL,然后替换VAL15VAL20相同的。

输出:

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支持搜索模式但替换匹配行中的另一个字符串?

任何帮助,将不胜感激。提前致谢。

kva*_*our 4

你们非常接近:

\n\n
sed -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##"

\n\n

我还想到STRING和之间的第一个连字符REPLACE是破折号而不是标准-,也许这是另一个问题。确保字符串完全相同。如果您不确定破折号,您可以使用

\n\n
sed -i \'/STRING.REPLACE.VAL##/{s/VAL15/VAL20/}\' myTestFile.cpp\n
Run Code Online (Sandbox Code Playgroud)\n\n

并回答您的问题,是的,您可以尝试通过以下方式进行多次匹配:

\n\n

sed

\n\n
sed -i \'/STRING.REPLACE.VAL##/{ /@"VAL/ { s/VAL15/VAL20/ } }\' myTestFile.cpp\n
Run Code Online (Sandbox Code Playgroud)\n\n

awk

\n\n
awk \'/STRING.REPLACE.VAL##/&&/@"VAL/{sub("VAL15","VAL20")}1\'  myTestFile.cpp\n
Run Code Online (Sandbox Code Playgroud)\n