免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3910 | 回复: 10
打印 上一主题 下一主题

请教shell用命令行替换“文本”中的内容的问题。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-13 09:23 |只看该作者 |倒序浏览
在linux下用shell命令行打开一个a.xml文件后,将其中一行替换掉。有什么方法吗。谢谢

a.xml的内容:
<project name="Uap_dist" default="copy" basedir="./Uap_dist">
    <target name="build">
        <cvs command="up -d" tag="bate01" cvsRoot=":pserver:ty@10.92.2.82:/cvsroot" />
    </target>
</project>

将tag="bate01"换成tag="bate02"写个shell自动完成

论坛徽章:
0
2 [报告]
发表于 2006-10-13 09:42 |只看该作者
sed -i '/tag=\"bate01\"/tag=\"bate02\"/s' a.xml
应该是这样,我忘了"要补要用\转义.

论坛徽章:
0
3 [报告]
发表于 2006-10-13 10:34 |只看该作者
谢谢
如果要想把当前目录中的所有xml文件替换,将tag="bate01"换成tag="bate02"
循环一下怎么写。大家知道吗


照例子写了个,但总报错。shell的语法不熟
-------------------------------------------------------------------------------
# file convert.sh
#!/bin/sh

for filename in `find . -name "*.xml"`
  do
    echo Deal with $filename
    sed 's/tag="bate01"/tag="bate02"/' $filename > $filename'.tmp'
    rm -f $filename
    mv $filename'.tmp' $filename
    echo "                        [done!]"
  done
------------------------------------------------------------------------------------
'/cpplugin.sh: line 4: syntax error near unexpected token `do
'/cpplugin.sh: line 4: `  do

[ 本帖最后由 spouter 于 2006-10-13 10:51 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2006-10-13 10:39 |只看该作者
sed -e 's/tag="bate01"/tag="bate02"/g' a.xml >a.tmp.xml
mv -f a.tmp.xml a.xml
用全文替换,应该不用循环。

论坛徽章:
0
5 [报告]
发表于 2006-10-13 10:52 |只看该作者
原帖由 littlecrazy 于 2006-10-13 10:39 发表
sed -e 's/tag="bate01"/tag="bate02"/g' a.xml >a.tmp.xml
mv -f a.tmp.xml a.xml
用全文替换,应该不用循环。



不好意思写错了,不是当前文件是当前目录,多谢帮忙。

论坛徽章:
0
6 [报告]
发表于 2006-10-13 11:07 |只看该作者
当前目录?那可能就要用一个for循环了

论坛徽章:
0
7 [报告]
发表于 2006-10-13 13:26 |只看该作者
sed '/xxxx/xxx' -i *
这样可以么?不循环,直接*

论坛徽章:
0
8 [报告]
发表于 2006-10-16 09:35 |只看该作者
原帖由 Yuri.G. 于 2006-10-13 13:26 发表
sed '/xxxx/xxx' -i *
这样可以么?不循环,直接*


不行

论坛徽章:
0
9 [报告]
发表于 2006-10-16 11:07 |只看该作者
for f in `find -name "*.xml"`; do sed -e 's/tag="bate01"/tag="bate02"/g' $f >/tmp/$f.tmp;
mv -f /tmp/$f.tmp $f; done

试试看能否解决问题?

论坛徽章:
0
10 [报告]
发表于 2006-10-19 12:03 |只看该作者
find . -name "*.xml" | xargs sed -i.bak 's/tag="bate01"/tag="bate02"/'       一句话就执行完
没sed就perl
find . -name "*.xml" | xargs perl -i.bak -pe 's/tag="bate01"/tag="bate02"/'
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP