请教shell用命令行替换“文本”中的内容的问题。
在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自动完成
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
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"/'
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
试试看能否解决问题?
sed '/xxxx/xxx' -i *
这样可以么?不循环,直接*
不行
当前目录?那可能就要用一个for循环了
不好意思写错了,不是当前文件是当前目录,多谢帮忙。
sed -e 's/tag="bate01"/tag="bate02"/g' a.xml >a.tmp.xml
mv -f a.tmp.xml a.xml
用全文替换,应该不用循环。
谢谢
如果要想把当前目录中的所有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 编辑 ]
sed -i '/tag="bate01"/tag="bate02"/s' a.xml
应该是这样,我忘了"要补要用转义.