
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了 请问如何优化,因为我要写的脚本有空格。。求高手帮忙 展开
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了 请问如何优化,因为我要写的脚本有空格。。求高手帮忙 展开
1个回答
展开全部
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}'
分隔符都不用设置,直接用默认的就可以。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询