外壳负责扩展变量。当您使用单引号表示字符串,将其内容逐字处理,所以sed
现在尝试取代文字的每次出现$var1
的ZZ
。
使用双引号
使用双引号使外壳扩展变量,同时保留空白:
sed -i "s/$var1/ZZ/g" "$file"
当您需要替换字符串中的引号字符时,必须在其前面加上反斜杠,该反斜杠将由外壳程序解释。在下面的示例中,字符串quote me
将替换为"quote me"
(字符&
解释为sed
):
sed -i "s/quote me/\"&\"/" "$file"
使用单引号
如果您有很多shell元字符,请考虑使用单引号将模式,并将双引号用作变量:
sed -i 's,'"$pattern"',Say hurrah to &: \0/,' "$file"
注意我是如何使用s,pattern,replacement,
的,而不是s/pattern/replacement/
,我这样做是为了避免干扰/
在\0/
。
例
然后,shell sed
使用以下参数(假设pattern=bert
和file=text.txt
)运行上述命令:
-i
s,bert,Say hurrah to &: \0/,
text.txt
如果file.txt
包含bert
,则输出将是:
Say hurrah to bert: \0/