UAd*_*ter 436 command-line bash sed
我尝试使用以下代码替换QQ
为ZZ
,但它没有做我想要的:
var1=QQ
sed -i 's/$var1/ZZ/g' $file
Run Code Online (Sandbox Code Playgroud)
但是,此代码执行我想要的操作:
sed -i 's/QQ/ZZ/g' $file
Run Code Online (Sandbox Code Playgroud)
我如何在 中使用变量sed
?
Lek*_*eyn 582
shell 负责扩展变量。当您对字符串使用单引号时,其内容将按字面意思处理,因此sed
现在尝试$var1
用ZZ
.
使用双引号使 shell 扩展变量同时保留空格:
sed -i "s/$var1/ZZ/g" "$file"
Run Code Online (Sandbox Code Playgroud)
当您需要替换字符串中的引号字符时,您必须在它前面加上一个反斜杠,该反斜杠将由 shell 解释。在以下示例中,字符串quote me
将替换为"quote me"
(字符&
由 解释sed
):
sed -i "s/quote me/\"&\"/" "$file"
Run Code Online (Sandbox Code Playgroud)
如果您有很多 shell 元字符,请考虑对模式使用单引号,对变量使用双引号:
sed -i 's,'"$pattern"',Say hurrah to &: \0/,' "$file"
Run Code Online (Sandbox Code Playgroud)
请注意我如何使用s,pattern,replacement,
而不是s/pattern/replacement/
,我这样做是为了避免干扰/
in \0/
。
然后 shellsed
使用下一个参数(假设pattern=bert
和file=text.txt
)运行上述命令:
-i
s,bert,Say hurrah to &: \0/,
text.txt
Run Code Online (Sandbox Code Playgroud)
如果file.txt
包含bert
,输出将是:
Say hurrah to bert: \0/
Run Code Online (Sandbox Code Playgroud)
小智 185
我们可以在sed
使用双引号时使用变量:
sed -i "s/$var/r_str/g" file_name
Run Code Online (Sandbox Code Playgroud)
如果/
变量中有斜杠,则使用不同的分隔符,如下所示:
sed -i "s|$var|r_str|g" file_name
Run Code Online (Sandbox Code Playgroud)