如何使用SHELL替换文件中的内容???

如何使用SHELL替换文件中的内容???

我想把很多文件中有诸如  “AAA”的地方都换成“BBB”

例如我用 grep -R AAA ./ 找不所有含有AAA的文件。我希望把文件中的AAA都换成BBB。我应该怎么写个SHELL语句来执行这个功能呢???      
cat file1 | tr "[AAA]" "[BBB]" > file2
把文件file1做个复制为file2,然后把AAA替换为BBB      
这个script只能把目标目录中的文件改变,对于其中的子目录中文件不能改变,可以用递归的来完成
#!/bin/bash
st( )
{
for loop in  `ls -al       PATH        |awk '$1 ~ /^-/ {print $9}'`                ###这一步,我想不到其他办法了,目的是找出PATH中文件,而没有找子目录中的文件

do

echo "$loop"  ###打印被改变的文件
cat $loop |sed 's/AAA/BBB/g'>$loop

done

}
st
对于子目录中文件可以先找到目录然后递归就可以了,对于效率问题没考虑(对文件都在一起效率肯定高)
`ls -al       PATH        |awk '$1 ~ /^-/ {print $9}'`   也可用grep 找 然后uiqe 使其唯一。最后管道到for in 中,这种方法对子目录中的文件也可以替换
替换有很大的风险,即使验证也应该多见几个目录来验证
      
能把所有文件(包括子目录里的文件)都替换
#!/bin/bash
      2 st( )
      3 {
      4 echo "The changed file :"
      5
      6 for loop in  `find   path`
      7
      8 do
      9
     10  if [ -f $loop ]
     11   then
     12   echo "$loop"
     13   cat $loop |sed 's/a/s/g'>$loop
     14   fi
     15
     16 done
     17
     18 }
     19 st      
sed 's/AAA/BBB/g' filename      
是对n个文件的change