需要Shell / Bash Geeks的帮助,特别是在Mac OS上
我想在一堆源文件中搜索一个模式,但是想要在具有此模式的行中替换另一个字符串。
例如:
Private const String myTestString = @“VAL15”; // STRING-REPLACE-VAL##
在这里,我想在源文件中搜索“STRING-REPLACE-VAL ##”模式,然后将VAL15替换为VAL20。
输出:
private const String myTestString = @“VAL20”; // STRING—REPLACE-VAL##
尝试下面的命令,但没有按预期工作。
sed -i '.bkp' '/,STRING—REPLACE-VAL##/ {; s/,VAL15,/,VAL20,/;}' myTestFile.cpp
Q2 - 是否可以搜索STRING—REPLACE-VAL##
,然后在同一行中搜索匹配的模式@"VAL??"
,并将15
替换为20
sed支持搜索&很容易替换相同的模式,但不确定sed是否支持搜索模式但是替换匹配行中的另一个字符串?
任何帮助将不胜感激。提前谢谢。
答案 0 :(得分:-1)
你可以用简单的东西来做,如下:
sed -i 's/VAL15\(.*STRING-REPLACE-VAL\)/VAL20\1/'
如果某行包含VAL15
后跟STRING-REPLACE-VAL
,则会将VAL15
替换为VAL20
。
如果订单不是保证,你当然会变得更复杂:
sed -E '/STRING-REPLACE-VAL/bx ; b ; :x ; s/VAL15/VAL20/ ;'
请注意,;
是特定于GNU的,并且可能无法在所有平台上运行(我相信您可以在其他平台上使用-e
)。该语句基本上说:如果该行匹配STRING-REPLACE-VAL
,则转移到标签:x
,否则转到结尾。如果您去标记x:
,请在该行上运行s/VAL15/VAL20
。请参阅here以获取参考资料