无需在bash中打开文件即可对文件进行合理的更改?

时间:2011-12-22 09:12:36

标签: linux bash

我有一些XML文件。

目前,属性envid设置为null,我希望它在所有文件中都是QA。如果不打开每个文件,我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

sed -i 's:envid="":envid="QA":g' *.xml

应在envid=""个文件中用envid="QA"替换*.xml的每个出现次数。但是不要忘记XML文件可以被格式化,例如这不会被取代:

<tag envid=''>

这两个

<tag envid=
     "">

答案 1 :(得分:1)

开场是什么意思?要更改文件,您必须打开它,但可能使用与文本编辑器不同的程序。例如:

sed -i~ 's/envid="null"/envid="QA"/g' *.xml

它应该用xml文件中的envid="null"替换所有字符串envid="QA",留下带有~后缀的备份。如果在一条线上需要几个替代品,则需要g

但是以这种方式更换xml时要小心。如果任何xml文件在某处包含字符串envid="null"(attibute xenvid,元素内的文本),脚本也将替换它。为安全起见,我使用的是xsh

xsh 'for //@envid[.="null"] set . "QA" ; save :b' -F *.xml

答案 2 :(得分:0)

我没有足够的背景来给你一个确切的答案。但是,尝试从以下方面获取灵感:

perl -pi -e 's/foo/bar/g' *.xml