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