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

标签 bash shell awk sed

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

例如:

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##" 也会发生同样的情况。

我还想到 STRINGREPLACE 之间的第一个连字符是 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/

相关文章:

shell - docker run 在卷标志中使用 $(pwd) 抛出 "invalid reference format: repository name must be lowercase"

shell - Shell脚本: Get cURL error, if wrong user

shell - packet_write_wait : Connection to xxx. xxx.xxx.xxx:管道损坏

linux - 获取文本文件中单词列表的字典定义的最简单方法

Bash - 删除两位数数字的前导零

linux - AWK 在 Bash 中返回/打印为关联数组

Bash while循环逐行读取文件

bash - 在解锁时运行脚本?

linux - 理解 awk 表达式

linux - 用最后一个已知列替换空/空白列 (sed/awk/script)