带有变量和空格的Sed

时间:2018-03-24 06:00:59

标签: sed sh

我如何在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

那我该怎么做呢?

3 个答案:

答案 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

solution from John Mee

答案 2 :(得分:0)

ed与从here-doc

中读取的命令一起使用
ed tmp.txt <<END_ED_COMMANDS
1i
$TMP
.
w
q
END_ED_COMMANDS