用 Bash 变量替换 sed [英] sed substitution with Bash variables
本文介绍了用 Bash 变量替换 sed的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用 Bash 脚本中的 sed 更改文本文件中的值,
I am trying to change the values in a text file using sed in a Bash script with the line,
sed 's/draw($prev_number;n_)/draw($number;n_)/g' file.txt > tmp
这将在 for
循环中.为什么它不起作用?
This will be in a for
loop. Why is it not working?
推荐答案
'
中的变量在 Bash 中不会被替换.要获得字符串替换(或插值,如果您熟悉 Perl),您需要将其更改为使用双引号 "
而不是单引号:
Variables inside '
don't get substituted in Bash. To get string substitution (or interpolation, if you're familiar with Perl) you would need to change it to use double quotes "
instead of the single quotes:
# Enclose the 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 the relevant portion
# and prevent accidental expansion for !, backticks, etc.
$ sed 's/draw('"$prev_number"';n_)/draw('"$number"';n_)/g' file.txt > tmp
# A variable cannot contain arbitrary characters
# See link in the 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 替代命令使用不同的分隔符
- 除非您在不同的文件中需要它,否则您可以使用 -i 标志来改变文件的位置
这篇关于用 Bash 变量替换 sed的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文