我尝试了以下代码来替换 QQ
与 ZZ
,但它没有做我想做的:
var1=QQsed -i 's/$var1/ZZ/g' $file
但是,这段代码做了我想要的:
sed -i 's/QQ/ZZ/g' $file
如何在 sed
?
我尝试了以下代码来替换 QQ
与 ZZ
,但它没有做我想做的:
var1=QQsed -i 's/$var1/ZZ/g' $file
但是,这段代码做了我想要的:
sed -i 's/QQ/ZZ/g' $file
如何在 sed
?
Shell负责扩展变量。 当您对字符串使用单引号时,其内容将按字面处理,因此 sed
现在尝试替换文字的每个出现 $var1
由 ZZ
.
使用双引号使shell扩展变量,同时保留空白:
sed -i "s/$var1/ZZ/g" "$file"
当您需要替换字符串中的引号字符时,您必须在其前面加上反斜杠,该反斜杠将由shell解释。 在下面的示例中,字符串 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
):
-is,bert,Say hurrah to &: \0/,text.txt
如果 file.txt
包含 bert
,输出将是:
Say hurrah to bert: \0/
我们可以在 sed
使用双引号:
sed -i "s/$var/r_str/g" file_name
如果你有斜线 /
在变量中,然后使用不同的分隔符,如下所示:
sed -i "s|$var|r_str|g" file_name
扩展(双关语意) @玛尼的回答,
perl
|
也可能出现在变量的值中,所以不要害怕尝试其他分隔符