我试图通过谁命令的输出替换第5行中的字母我但是收到错误
sed:-e表达式#1,字符49:未终止的's'命令
我尝试使用 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
答案 0 :(得分:0)
我不清楚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
无法输出的分隔符。 1}}。
假设who
永远不会输出任何+
字符(我不知道它是否属实,你应该确定!),你可以改用以下sed
命令,其中+
用作分隔符:
sed -i "5 s+I+$(who)+" $1/$i/hello.txt