I试图用who命令的输出替换第5行中的字母I,但得到了一个错误
sed:-e表达式#1,char 49:未终止的‘命令
我尝试过使用eval,但没有成功。
#!/bin/bash
for i in $2 $3 $4 $5 $6 $7
do
mkdir $1/$i
cp hello.txt $1/$i
user=$(who)
sed -i '5 s/.*/I changed this line/' $1/$i/hello.txt
sed -i "5 s/I/$(who)/" $1/$i/hello.txt
done发布于 2016-09-07 09:17:23
我不太了解who,但是快速测试显示它可以包含/字符,这是您在sed命令中使用的分隔符。在我的系统中,它确实输出了以下内容:
myName pts/0 2016-09-07 11:14 (10.123.45.678)注意/中的pts/0,这就是破坏sed命令的原因,因为它是它的分隔符。实际上,以下展开的sed命令包含了太多的/:
sed -i "5 s/I/myName pts/0 2016-09-07 11:14 (10.123.45.678)/" $1/$i/hello.txt我认为您可以使用whoami命令来解决您的问题,它的输出可能更符合您的预期:
$ whoami
myName如果您确实希望使用who的输出,则必须在who命令的输出中转义分隔符,或者使用who无法输出的分隔符。
假设who永远不会输出任何+字符(我不知道它是否为真,您应该确保!),您可以使用以下sed命令,其中使用+作为分隔符:
sed -i "5 s+I+$(who)+" $1/$i/hello.txthttps://stackoverflow.com/questions/39365762
复制相似问题