用bash变量进行sed替换
尝试使用sed在bash脚本中使用行更改文本文件中的值,
sed 's/draw($prev_number;n_)/draw($number;n_)/g' file.txt > tmp
这将在for循环中。 不知道为什么它不起作用。 有什么建议么?
'
里面'
变量不会在bash中被替换。 要获得字符串替换(或插值,如果您熟悉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
进一步阅读:
单引号内的变量不会扩展,在双引号内,在这种情况下使用双引号。
sed "s/draw($prev_number;n_)/draw($number;n_)/g" file.txt > tmp
你也可以使它与eval
工作,但不这样做!
sed "s/draw($prev_number;n_)/draw($number;n_)/g"
这会工作吗?
链接地址: http://www.djcxy.com/p/47131.html