shell 的查找用法

aree 2014-11-11 05:20:26
文件中有很多这样的值,我只想找出ro.CCCC的<VALUE>"YES"</VALUE> 值,并替换成<VALUE>"NO"</VALUE>
....
<VAR>
<SDMID>ro.dsBB</SDMID>
<VALUE>"YES"</VALUE>
</VAR>

<VAR>
<SDMID>ro.AAA</SDMID>
<VALUE>"No"</VALUE>
</VAR>

<VAR>
<SDMID>ro.CCCC</SDMID>
<DESC>product info.</DESC>
<VALUE>"YES"</VALUE>
</VAR>
.....
...全文
223 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
奔跑的路 2014-11-12
  • 打赏
  • 举报
回复
修改以后可以用 grep -A 3 ro.CCCC aa.txt 查看一下有没有修改成功,有些没有成功的,变动一下let再执行脚本
奔跑的路 2014-11-12
  • 打赏
  • 举报
回复
不好意思,一开始看错了你表达的意思 刚刚写了个脚本,处理这一类问题,相信以后也能用的上,我自己测过可以用,有一个要求是ro.CCCC要处在YES的前两行,如果相隔其他行数的情况,在脚本里面改一下let就行了
sed -n "/ro.CCCC/=" aa.txt | xargs > b.txt
N=`awk  '{ printf("%d",NF) }' b.txt`
echo $N
for((i=1;i <= N;i++))
  do
    x=`awk -v temp=$i '{print $temp}' b.txt`;
    let x=x+2;
    echo $x;
    sed -i "$x s/YES/NO/g" a;
  done

aree 2014-11-11
  • 打赏
  • 举报
回复
我这个文件是叫aa.txt 那要怎么写? sed -i 's/^\<VALUE\>\"YES\"\</VALUE\>$/\<VALUE\>\"NO\"\</VALUE\>/g' ro.CCCC aa.txt ??? 不行啊。试过吗? 另外,YES这个值是不固定的,如果这里原来就是NO呢? 那也要找出来。
奔跑的路 2014-11-11
  • 打赏
  • 举报
回复
sed -i 's/^\<VALUE\>\"YES\"\</VALUE\>$/\<VALUE\>\"NO\"\</VALUE\>/g' ro.CCCC
奔跑的路 2014-11-11
  • 打赏
  • 举报
回复
sed -i 's/^<VALUE>"YES"</VALUE>$/<VALUE>"NO"</VALUE>/g' ro.CCCC

18,772

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 专题技术讨论区
社区管理员
  • 专题技术讨论区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧