在Linux中使用sed替换字符串

在Linux中使用sed替换字符串,linux,string,bash,replace,sed,Linux,String,Bash,Replace,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 我试过用不同的方式使用sed。然而,它不起作用。有人知道吗 概念#22稍后在同一文件中引用到另一个概念。这是原因吗 请注意,在同一bash脚本中

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

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

这将起作用。

您需要转义在
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

这将起作用。

*
是一个正则表达式元字符,它本身不匹配(或者只是碰巧匹配)。您需要在
原始\u str
中转义它

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

$(变量//substr/repl}
语法是特定于Bash的。在一般情况下,您将需要转义任何正则表达式专用项--
[
\
,和
,这在Bash中以常规方式有点困难。

*
是一个不匹配的正则表达式元字符(或者只是巧合)您需要在
原始\u str
中转义它

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

$(变量//substr/repl}
语法是特定于Bash的。在一般情况下,您需要转义任何正则表达式专用项--
[
\
——在Bash中,一般来说这有点难。

是的,你是对的,但我刚刚意识到,你可以逃避
\
,我觉得这很有趣。正如我所写的,后面的代码(替换)正在工作。我想替换第一个代码。即“米”到“毫米”。此外,我尝试了使用“\”。它对问题不起作用。是的,你是对的,但我刚刚意识到,你可以逃避
,我觉得这很有趣。正如我所写的,后面的代码(替换)正在运行。我想替换第一个代码。即从“米”到“毫米”。此外,我已尝试使用“\”。它对该问题无效。