用shell函数或是if语句写一个“一个字符替换一个文件夹中所有文件中的相同字符”的小程序”

用shell函数或是if语句写一个“一个字符替换一个文件夹中所有文件中的相同字符”的小程序”。我要完整的程序,而不是一小段命令,谢谢……

是linux系统么?那推荐使用sed,一条命令即可:

 

比如,要将目录/modules下面所有文件中的“zhangsan”都修改成“lisi”,这样做:

sed -i "s/zhangsan/lisi/g" `grep zhangsan -rl /modules`

解释一下参数:


-i 表示inplace edit,就地修改文件

-r 表示搜索子目录

-l 表示输出匹配的文件名


这个命令组合很强大,要注意备份文件

 

那你要的完整程序就是:

#!/bin/bash
read -p "请输入要替换的字符串:"  var1
read -p "请输入替换后的字符串:"  var2
sed -i "s/$var1/$var2/g" `grep $var1 -rl ./modules`
exit

请注意,以上代码定义到了当前的modules目录,如果你要修改被的目录请自定义,当然你也可以使用read读取你输入的目录,依葫芦画瓢我就不多说了。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-04

以下shell脚本完成将指定文件夹下所有文件中的abc都替换为def。

#!/bin/sh
folder=/home/myFolder #这里可以写绝对路径也可以写相对路径,但建议前者
src="abc" #要替换的字符串
des="def" #替换后的字符串
echo "Replacing..."
sed -i "/$src/s/$src/$des/g" $folder/*
echo "Done!"

请自行修改目录路径及字符串定义。 

此脚本没有考虑目录中含有子目录的情况,若有此需求,请提出。

追问

非常感谢您的回答,用sed我会了。你可以用if语句帮忙写下么、。主要是我现在正在学if语句,自己编的是错误的。所以需要您的帮助^非常感谢……

追答#!/bin/sh
folder=/home/myFolder #这里可以写绝对路径也可以写相对路径,但建议前者
src="abc" #要替换的字符串
des="def" #替换后的字符串
echo "Replacing..."
for ofile in $folder/*
do
    if [ ! -f $ofile ]; then
        continue #不是文件就立即继续下一次循环
    fi
    grep "$src" $ofile >/dev/null
    if [ $? -eq 0 ]; then
        sed -i "s/$src/$des/g" $ofile
    fi
done
echo "Done!"

不可避免需要用到sed。

$?用于取得上一条命令的返回值,0表示成功,非0表示失败。

本回答被提问者采纳
相似回答