使用SED给出错误的输出替换一行中的char

时间:2016-09-07 09:10:56

标签: bash

我试图通过命令的输出替换第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

1 个答案:

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