全部, 我有一个C头文件,我们称之为 test.h ,如下所示:
<img src="img/img.jpg" id="image1" onclick=diffImage(this) style="display:block" class ="image1"/>
<img src="img/img2.jpg" id="image2" onclick=diffImage(this) style="display:none"/>
<p id = "imgMessage"></p>
<button onclick = "changeStyle()"> Change</button>
我想用一个名为 $ test 的环境变量的值替换它(让我们假设值是&#34; new_value&#34;)。这就是我设置它的方式:
#define KNOWN_STRING "replace_this"
这样test.h将如下所示:
setenv test new_value
我尝试了这个sed命令:
#define KNOWN_STRING "new_value"
这里的推理是匹配双引号之间的任何(零个或多个?)字符。但我得到了:无与伦比的&#39;。
我也试过这个:
sed -i -E 's/KNOWN_STRING "(.+)"/KNOWN_STRING "'"$test"'"/g test.h
但我得到了:无与伦比的#34;。
我猜我的正则表达式不正确。任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
您需要使引号匹配。例如,以下内容有效:
$ sed -E 's/KNOWN_STRING "(.+)"/KNOWN_STRING "'"$test"'"/g' test.h
#define KNOWN_STRING "new_value"
如果您对自己所需的语句感到满意,可以添加-i
选项以便就地修改文件。
请注意,如果变量test
包含任何未转义的sed-active字符,则此方法将失败。
Awk可以做一些非常相似的事情,但没有活跃角色的潜在缺陷:
$ awk -v test="$test" '{gsub(/KNOWN_STRING ".+"/, "KNOWN_STRING \"" test "\"")} 1' test.h
#define KNOWN_STRING "new_value"
使用GNU awk(有时称为gawk),可以在适当的位置更改文件:
awk -i inplace -v test="$test" '{gsub(/KNOWN_STRING ".+"/, "KNOWN_STRING \"" test "\"")} 1' test.h