[英]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.