shell脚本sed替换命令的问题,求高手回答一下 谢谢啊

例如:又有一个a.config文件里面有一行name=dog用下面语句执行catcata.config|grep"^name">>/dev/nullif[$?-eq0];... 例如:又有一个a.config文件 里面有一行 name = dog 用下面语句执行
cat cat a.config | grep "^name" >>/dev/null
if [ $? -eq 0 ];then
name_test=`cat a.config | grep "^name" | awk -F'=' "{print $2}"`
sed "s/"${name_test}"/"cat"/" a.config
fi
经过测试代码运行错误,原因在于 name = dog 等号前后有空格 去掉空格就OK了 请问如何优化,因为我要写的脚本有空格。。求高手帮忙
展开
 我来答
百度网友5311d79
2014-03-05 · TA获得超过1.9万个赞
知道大有可为答主
回答量:6356
采纳率:71%
帮助的人:3359万
展开全部

1)cat a.config | grep "^name"  累赘,直接写为 grep "^name" a.config

2)>>/dev/null ,不需要>>,直接 > 就可以,即使输出可能是多行内容,也可以作为一个整体。

3)=前后有空格的话,将" = "(=前后加上了空格)设为字段分隔符就可以了。

     awk -F' = ' "{print $2}"

   当然,最好的做法是用集合[= ],这样=和空格都可以作为分隔符,而且无论=左右有几个空格都可以处理。awk -F'[= ]' "{print $NF}"  ,awk内置变量NF表示字段数,$NF就可以取出最后一个字段。

4)sed "s/"${name_test}"/"cat"/"  a.config 可以再简单些:sed "s/${name_test}/cat/"  a.config

 

不过,你要做替换,直接awk就可以完成了,何必awk加sed呢;此外,grep的结果保存下来,就不用做两次了。

output=`grep "^name" a.config`
[ -n "$output" ] && echo "$output" | awk '{$NF="cat";print}'

分隔符都不用设置,直接用默认的就可以。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式