下面四种方法可以让sed命令中引用替换变量值:
sed "s/$a/$b/" filename
:这个命令使用双引号来展开变量$a
和$b
的值,并将其作为sed命令的参数。它会在文件filename
中查找并替换第一个匹配到的$a
为$b
。
eval sed 's/$a/$b/' filename
:这个命令使用了eval
来展开变量$a
和$b
的值,并将其作为sed命令的参数。它会在文件filename
中查找并替换第一个匹配到的$a
为$b
。
sed 's/'$a'/'$b'/' filename
:这个命令在变量$a
和$b
的前后添加了单引号,以确保变量展开为其实际值。它会在文件filename
中查找并替换第一个匹配到的$a
为$b
。
sed s/$a/$b/ filename
:这个命令没有使用引号来展开变量$a
和$b
的值。它会在文件filename
中查找并替换第一个匹配到的$a
为$b
。注意,由于没有引号,如果$a
或$b
中包含空格或其他特殊字符,可能会导致意外的结果。
这些命令的区别在于变量展开的方式,以及对于特殊字符的处理。通常推荐使用双引号或单引号来展开变量,以避免因为特殊字符导致的错误。
实例
[root@localhost ~]# echo "hello,syn" |sed 's/syn/$HOSTNAME/g'
hello,$HOSTNAME //使用单引号变量引用失败
[root@localhost ~]# echo "hello,syn" |sed "s/syn/$HOSTNAME/g"
hello,localhost.localdomain
[root@localhost ~]# echo "hello,syn" |eval sed 's/syn/$HOSTNAME/g'
hello,localhost.localdomain
[root@localhost ~]# echo "hello,syn" |sed 's/syn/'$HOSTNAME'/g'
hello,localhost.localdomain
[root@localhost ~]# echo "hello,syn" |sed s/syn/$HOSTNAME/g
hello,localhost.localdomain