bash脚本:改变所有&到&在所有文件中

时间:2011-05-25 08:06:04

标签: bash

我有一个包含大量XML文件的文件夹。 其中一组中有&,应转换为&

我不是bash guru但是我可以用bash脚本以某种方式更改所有文件中的所有字符吗?

3 个答案:

答案 0 :(得分:3)

您只需要通过sed过滤器传递文件,如下面的记录:

$ echo '
this is line 1
this is line 2 with a & character.
and this is line 3 with & and & on it' | sed 's/&/&/g'

this is line 1
this is line 2 with a & character.
and this is line 3 with & and & on it

要使用一组文件执行此操作,您可以使用就地(自然备份)变体:

sed -i.bak 's/&/&/g' *.xml

答案 1 :(得分:3)

sed可以在当前工作目录中的所有文件上进行就地替换,

sed -i 's/&/&/g' *

如果你想要多层次,比如

for file in `find`; do sed -i 's/&/&/g' $file; done

如果您只想替换可能有用的.xml扩展名的文件,请执行

for file in `find -iname '*.xml'`; do sed -i 's/&/&/g' $file; done

答案 2 :(得分:2)

!/bin/bash
startdirectory="/home/jack/tmp/tmp2"
searchterm="&"
replaceterm="&"
        for file in $(grep -l -R $searchterm $startdirectory)
          do
           sed -e "s/$searchterm/$replaceterm/ig" $file > /tmp/tempfile.tmp
           mv /tmp/tempfile.tmp $file
           echo "Modified: " $file
        done
echo "Done!"