我如何在sed中使用包含变量的空格作为值? - 我使用sh
(不是bash
)作为终端。
我正在尝试做什么(在文件的第一行插入a b c
):
TMP='a b c'
sed -e '1i'${TMP} tmp.txt
然而,这个错误与消息
有关dynamic-config-manager-nginx.sh: -: not found
在文件中我只看到插入的第一个a
。 - 似乎sed
过早退出。如下所示,“强制”字符串周围的引号也不起作用,找不到"
命令
sed -e'“1e'$ {TMP}'”'tmp.txt
那我该怎么做呢?
答案 0 :(得分:2)
我认为您需要-i
选项来进行内部编辑。这让我们来到这里:
$ sed -i -e '1i'${TMP} tmp.txt
sed: can't read b: No such file or directory
sed: can't read c: No such file or directory
${TMP}
将扩展为sed
的多个参数。我们希望将它们全部放在一个字符串中:
sed -i -e "1i${TMP}" tmp.txt
还有一点需要注意:tmp.txt
必须包含至少一行。如果您知道tmp.txt
不存在或者是空文件,可以先执行echo > tmp.txt
之类的操作(警告:如果文件中包含某些内容,则会覆盖该文件)。
答案 1 :(得分:0)
使用awk解决方案:
#!/bin/sh
TMP="a b c"
exec 3<> tmp.txt && awk -v TEXT="$TMP" 'BEGIN {print TEXT}{print}' tmp.txt >&3
答案 2 :(得分:0)
将ed
与从here-doc
ed tmp.txt <<END_ED_COMMANDS
1i
$TMP
.
w
q
END_ED_COMMANDS