猿问

用bash变量替换SED

用bash变量替换SED

试图使用bash脚本中的sed更改文本文件中的值,

sed 's/draw($prev_number;n_)/draw($number;n_)/g' file.txt > tmp

这将处于for循环中。不知道为什么不行。有什么建议吗?


慕哥9229398
浏览 838回答 3
3回答

临摹微笑

内部变量'不要被取代。要获得字符串替换(或者内插法,如果您熟悉Perl),需要将其更改为使用双引号"而不是单引号:$ # enclose entire expression in double quotes$ sed "s/draw($prev_number;n_)/draw($number;n_)/g" file.txt > tmp $ # or, concatenate strings with only variables inside double quotes$ # this would restrict expansion to relevant portion$  # and prevent accidental expansion for !, backticks, etc$ sed 's/draw('"$prev_number"';n_)/draw('"$number"';n_)/g' file.txt > tmp $ # variable cannot contain arbitrary characters$ # see link in further reading section for details$ a='foo  bar'$ echo 'baz' | sed 's/baz/'"$a"'/g'sed: -e expression #1, char 9: unterminated `s' command二读:单引号和双引号在Bash中的差异用sed可以可靠地逃脱regex元字符吗?使用不同的分隔符代替sed命令除非您需要在另一个文件中使用它,否则可以使用-i标志以更改文件的位置

慕侠2389804

单引号中的变量不会展开,在双引号中,在这种情况下使用双引号。sed "s/draw($prev_number;n_)/draw($number;n_)/g" file.txt > tmp你也可以让它eval但别那么做!

饮歌长啸

sed "s/draw($prev_number;n_)/draw($number;n_)/g"这个有用吗?
随时随地看视频慕课网APP
我要回答