带变量和空间的Sed

带变量和空间的Sed,sed,sh,Sed,Sh,如何将包含空格的变量用作sed中的值我正在使用sh(不是bash)作为终端 我正在尝试执行的操作(在文件的第一行插入abc): 但是,这会导致消息出错 dynamic-config-manager-nginx.sh: -: not found 在这些文件中,我只看到插入的第一个a似乎sed退出得太早了。在未找到“命令的情况下,在下面这样的字符串周围“强制”加引号也不起作用 sed-e''1e'${TMP}''TMP.txt 那么我该如何实现这一点呢?我想您希望使用-I选项,在原地进行编辑。这让

如何将包含空格的变量用作sed中的值我正在使用
sh
(不是
bash
)作为终端

我正在尝试执行的操作(在文件的第一行插入
abc
):

但是,这会导致消息出错

dynamic-config-manager-nginx.sh: -: not found
在这些文件中,我只看到插入的第一个
a
似乎
sed
退出得太早了。在未找到
命令的情况下,在下面这样的字符串周围“强制”加引号也不起作用 sed-e''1e'${TMP}''TMP.txt


那么我该如何实现这一点呢?

我想您希望使用
-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
的操作(警告:如果文件包含某些内容,这将覆盖该文件).

我想你想要
-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
的操作(警告:如果文件包含某些内容,则会覆盖该文件)。

awk解决方案:

#!/bin/sh
TMP="a b c"
exec 3<> tmp.txt && awk -v TEXT="$TMP" 'BEGIN {print TEXT}{print}' tmp.txt >&3
!/bin/sh
TMP=“a b c”
exec 3 tmp.txt&&awk-v TEXT=“$tmp”'开始{print TEXT}{print}'tmp.txt>&3
使用awk的解决方案:

#!/bin/sh
TMP="a b c"
exec 3<> tmp.txt && awk -v TEXT="$TMP" 'BEGIN {print TEXT}{print}' tmp.txt >&3
!/bin/sh
TMP=“a b c”
exec 3 tmp.txt&&awk-v TEXT=“$tmp”'开始{print TEXT}{print}'tmp.txt>&3

使用
ed
和从此处文档读取的命令

ed tmp.txt <<END_ED_COMMANDS
1i
$TMP
.
w
q
END_ED_COMMANDS

ed tmp.txt使用
ed
和从文档读取的命令

ed tmp.txt <<END_ED_COMMANDS
1i
$TMP
.
w
q
END_ED_COMMANDS

ed tmp.txt是否可以
sed-e'1i'${tmp}”tmp.txt工作?另外,您的sed版本是什么?据我所知,对于非GNU版本,您需要在
I
命令之后加上反斜杠和换行符。请看,您也可以使用
echo“$tmp”| cat-tmp.txt
does
sed-e'1i'${tmp}“tmp.txt
work?另外,您的sed版本是什么?据我所知,对于非GNU版本,您需要在
I
命令后加上反斜杠和换行符。”。。请参阅,您也可以使用
echo“$TMP”| cat-TMP.txt
这假设GNU已使用,用于
-i
选项以及
i
命令。。。看啊。我不知道对于
-i
选项以及
i
命令,这假定GNU已使用。。。看啊。我不知道