如何在sed命令中使用变量?
我尝试使用以下代码用ZZ
替换QQ
,但它没有做我想要的:
var1=QQ sed -i 's/$var1/ZZ/g' $file
但是,这段代码符合我的要求:
sed -i 's/QQ/ZZ/g' $file
我如何在sed
使用变量?
shell负责扩展变量。 当你对字符串使用单引号时,它的内容将按字面意思处理,因此sed
现在尝试用ZZ
替换文字$var1
的每个匹配项。
使用双引号
使用双引号使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,
而不是s/pattern/replacement/
,我这样做是为了避免干扰/
in \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/
我们可以使用双引号在sed
使用变量:
sed -i "s/$var/r_str/g" file_name
如果变量中有斜杠/
,则使用不同的分隔符,如下所示:
sed -i "s|$var|r_str|g" file_name