首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用使用SED错误的who输出替换一行字符

用使用SED错误的who输出替换一行字符
EN

Stack Overflow用户
提问于 2016-09-07 09:10:56
回答 1查看 46关注 0票数 0

I试图用who命令的输出替换第5行中的字母I,但得到了一个错误

sed:-e表达式#1,char 49:未终止的‘命令

我尝试过使用eval,但没有成功。

代码语言:javascript
复制
#!/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
EN

回答 1

Stack Overflow用户

发布于 2016-09-07 09:17:23

我不太了解who,但是快速测试显示它可以包含/字符,这是您在sed命令中使用的分隔符。在我的系统中,它确实输出了以下内容:

代码语言:javascript
复制
myName   pts/0        2016-09-07 11:14 (10.123.45.678)

注意/中的pts/0,这就是破坏sed命令的原因,因为它是它的分隔符。实际上,以下展开的sed命令包含了太多的/

代码语言:javascript
复制
sed -i "5 s/I/myName   pts/0        2016-09-07 11:14 (10.123.45.678)/" $1/$i/hello.txt

我认为您可以使用whoami命令来解决您的问题,它的输出可能更符合您的预期:

代码语言:javascript
复制
$ whoami
myName

如果您确实希望使用who的输出,则必须在who命令的输出中转义分隔符,或者使用who无法输出的分隔符。

假设who永远不会输出任何+字符(我不知道它是否为真,您应该确保!),您可以使用以下sed命令,其中使用+作为分隔符:

代码语言:javascript
复制
sed -i "5 s+I+$(who)+" $1/$i/hello.txt
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39365762

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档