版主帮忙呀

1. sed 的介绍见
$ man sed
$ info sed
2. 借助 awk 的实现:
$ awk '/abc/ { gsub("abc", "def"); } { print; }' a.s > a.s.new
$ rm -f a.s
$ mv a.s.new a.s      
斑竹,为啥我这么写不行呢?

replace()
{
    TMP=".tmp"
    for FILE in *; do
      if [ -d $FILE ];
      then
        cd $FILE
        replace $1 $2
        cd ..
      else
        sed -e 's/$1/$2/g' $FILE>$FILE$TMP
        cp $FILE$TMP $FILE
        rm -f $FILE$TMP
      fi
    done
}
replace $1 $2      
没有用过函数(shell 支持递归?). 你想解决一个什么问题?      
想实现把一个文件夹下所有文件(包含子文件夹)中的字符串替换

shell支持递归的
我用echo "$FILE" 试过,可以打印所有文件      
你的脚本运行时有没有什么提示信息?      
没有别的提示

我把else里的语句去掉,改成echo $FILE,文件名显示正确      
1. 回去"研究"了一下, shell 确实支持递归, 我还写了一个计算 Fibonacci 数列的递归函数, 运行正常, 爽! 脚本如下:
复制内容到剪贴板
代码:
#!/bin/bash

# 文件名: fib.sh
# 功能: 打印 Fibonacci 数列的前 10 个数值

function fib {
    if [ $1 = 0 -o $1 = 1 ]; then
        echo $1
    else
        local n_2=$(($1 - 2))
        local n_1=$(($1 - 1))
        local f_n_2=$(fib $n_2)
        local f_n_1=$(fib $n_1)
        local f_n=$(($f_n_2 + $f_n_1))
        echo $f_n
    fi
}

xx=0
while [ $xx -le 10 ]; do
    printf "fib(%2d) = %d\n" $xx $(fib $xx)
    xx=$(($xx + 1))
done
2. 你这个问题我觉得用 find 来实现可能容易一些, 至少不要考虑递归的问题      
find可以实现替换文本内容吗?

该怎么写版主?      
使用 find 的 -exec 选项, 详情见 man find