繁体   English   中英

在Linux中使用sed替换字符串

[英]Replace a string using sed in Linux

我想用替换字符串替换以下原始字符串。

original_str="#22=SI_UNIT(*,*,#5,'','metre');"
replace_str="#22=SI_UNIT(*,*,#5,'','millimetre');"
sed -i "s/$original_str/$replace_str/" ./output/modified.txt

我已经尝试过使用“ sed”的不同方式。 但是,它不起作用。 有人有什么主意吗?

稍后将在同一文件中引用概念#22。 这是原因吗?

请注意,对于同一bash脚本中的以下字符串,它工作正常:

original_str="#103=CARTESIAN_POINT('P3',0.0,0.0,1.0,#72);"
replace_str="#103=CARTESIAN_POINT('P2',10.0,10.0,10.0,#72);"
sed -i "s/$original_str/$replace_str/" ./output/modified.txt

#103概念在同一文件的更高版本概念中不使用。

谢谢。

您需要转义sed中具有特殊含义的字符,在这种情况下为*

original_str='#22=SI_UNIT(\*,\*,#5,'','metre');'
replace_str='#22=SI_UNIT(*,*,#5,'','millimetre');'
sed -i "s/$original_str/$replace_str/" ./output/modified.txt

这将起作用。

*是一个正则表达式元字符,它自身不匹配(或仅偶然匹配)。 您需要在original_str对其进行转义。

sed -i "s/${original_str//\*/\\*}/$replace_str/" ./output/modified.txt

$(variable//substr/repl}语法是特定于Bash的。在一般情况下,您将需要转义任何正则表达式的特殊$(variable//substr/repl} [\\.在Bash中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM