Linux环境下替换工程文件的小工具及如何替换文件中的字符串

来源:互联网 发布:360网络连接配置有问题 编辑:程序博客网 时间:2024/05/17 05:15

       由于实际需求,有时需要把一些文件替换掉工程中的相应文件。首先我把这些文件放到同一个目录,然后把下面的脚本放到同一目录,执行这个脚步就可以了。这个小脚本还需要很多完善的地方。

     

#!/bin/bashif [ ! $1 ]; then    echo "Usage: $0 prj_path"    exit;fisource_file=$(find ./ -maxdepth 1 -name "*.c" -o -name "*.h" -o -name "*.cpp")for file in $source_file;do    echo "current file: $file"    file_tmp=$(basename ${file})    find $1 -name $file_tmp -type f -exec cp -f $file_tmp {} \;done


 

perl

可以执行以下命令:
find . -name '*.c' -print0 | xargs -0 perl -pi -e 's/x_cnt/x_counter/g' 
xargs 把find命令的结果作为perl的参数。
find的参数-print0和xargs的参数-0是防止文件名中有空格或新行造成错误,可以man xargs获得帮助。
注意: 如果替换的字符包括 ()[]/"'!? 等等这样的特殊字符,你必须在字符前加上反斜杠\ 。
这种方法的好处是不用启动编辑器,比较迅速。缺点是容易出现不想要的替换,例如:把px_cnt替换成了px_counter。


sed

仍以上面的例子讲解:
find . -name "*.c" -print0 | xargs -0 sed -i 's/x_cnt/x_counter/g'
优缺点和perl方法相同。 
以上方法的差异只在于使用工具的不同,相信肯定还有别的工具能办到这件事。

 

把某一目录下的文件全部更改为dos格式

find /home/your -type f -exec unix2dos {} \;


原创粉丝点击