sed命令中如何同时使用行尾标识$与双引号实现变量字符串追加
sed命令中如何同时使用行尾标识$与双引号实现变量字符串追加
嗨,这个问题我之前也碰到过,核心就是shell对引号里的字符解析规则搞的鬼!
你遇到的情况很典型:
- 用单引号
sed -i 's/$/$var/' inputfile.txt时,shell不会解析单引号里的$var,所以直接把字符串$var追加到行尾了,不是你要的变量值。 - 用双引号
sed -i "s/$/$var/" inputfile.txt时,shell会先解析双引号里的内容,这里的$会被shell当成变量开头处理(比如如果没有对应变量就会被忽略),导致sed拿到的正则里没有行尾标识,自然达不到效果。
解决办法很简单,给你两种常用思路:
第一种,在双引号里把sed要用的行尾$转义一下,让shell别把它当成变量解析,留给sed处理:
sed -i "s/\$/$var/" inputfile.txt
第二种,混合使用单引号和双引号,把变量部分用双引号包裹(让shell解析变量),正则的行尾部分用单引号包裹(避免shell解析$),拼接成完整命令:
sed -i 's/$/'"$var"'/' inputfile.txt
两种方法都能完美解决你的问题,选哪种看你个人习惯就行~
备注:内容来源于stack exchange,提问作者vipin kumar soni
相关产品推荐
相关产品推荐

