我在这里发现了有趣的讨论并尝试了给出的解决方案sed
如何在文件开头插入文本?
它适用于普通文本,但不适用于将文本保存在变量中。
wolf@linux:~$ cat file.txt
1
2
3
wolf@linux:~$
将文本 ( <added text>
) 添加到文件开头
wolf@linux:~$ sed -i '1s/^/<added text>\n/' file.txt
wolf@linux:~$
有用!
wolf@linux:~$ cat file.txt
<added text>
1
2
3
wolf@linux:~$
但是,当我用变量尝试它时,它不再起作用了。
wolf@linux:~$ var='Text 1'
wolf@linux:~$ echo $var
Text 1
wolf@linux:~$
wolf@linux:~$ cat file.txt
1
2
3
wolf@linux:~$ sed -i '1s/^/"$var"\n/' file.txt
wolf@linux:~$ cat file.txt
"$var"
1
2
3
wolf@linux:~$
除了"$var"
,我如何调用命令$var
中的实际值sed
?我使用 GNU sed
4.7:
sed (GNU sed) 4.7 Packaged by Debian
Copyright (C) 2018 Free Software Foundation, Inc.
答案1
问题是您已按照建议将sed
说明括在单引号中' ... '
。但是,在单引号内,变量扩展例如$var
被禁用,并且表达式仍然逐字保留。
作为解决方案,您可以将说明括在双引号中:
sed -i "1s/^/$var\n/" file.txt
但请注意,我建议为此目的使用“插入”命令:
sed -i "1i $var" file.txt
将在第 1 行之前插入内容$var
。
编辑
正如 @DigitalTrauma 在评论中正确指出的那样:如果您想保护“除变量之外的所有内容”免受(不需要的)扩展,您可以使用带有混合引用的串联字符串参数,但这在s
命令示例中主要有意义:
sed -i 's/^/'"$var"'\n/' file.txt