我需要使用该命令在文件每一行的末尾附加一些变量字符串sed
。
假设这$var
是一个变量字符串。
如果我使用单引号sed -i 's/$/$var/' inputfile.txt
-->,那么 $var 会打印在行末。
如果我使用双引号sed -i "s/$/$var/" inputfile.txt
-->,那么它无法将“$”解析为行末。
如何在单行 sed 命令中使用行尾变量和双引号?
答案1
有几种方法可以解决您的问题。在这种情况下,最简单的方法是用双引号括住 sed 命令:sed -i "s/$/$var/" inputfile.txt
。第一个$
后面没有任何可能成为有效变量名的内容,并将作为纯 $ 字符传递给 sed,表示行尾。$var
相反,表达式 位于双引号之间时,将扩展为变量 var 的值;如果该值包含斜杠字符 /,您将需要对 sed 的 s 命令使用除 / 之外的其他分隔符,例如 a = like sed -i "s=$=$var=" inputfile.txt
。
在其他情况下,将命令拆分为需要变量扩展的部分(用双引号括起来),将不需要变量扩展的部分(用单引号括起来)可能更容易。例如,您可以将它们混合在一起sed -i 's/some search string$/some replacement string'"$var"'some more/' inputfile.txt
。如果在它们之间不加空格,shell 会将这些不同引号的字符串无缝拼接在一起。但这很难阅读;在许多情况下,转义单个字符更容易阅读,输入也更少。