外壳负责扩展变量。当您使用单引号表示字符串,将其内容逐字处理,所以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/