用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


进一步阅读:

  • Bash中单引号和双引号之间的区别
  • 是否有可能使用sed可靠地转义正则表达式元字符
  • 使用sed substitute命令的不同分隔符
  • 除非您需要使用不同的文件,否则可以使用-i标志来更改文件

  • 单引号内的变量不会扩展,在双引号内,在这种情况下使用双引号。

    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

    上一篇: sed substitution with bash variables

    下一篇: What is the difference between sed and awk?