在多个文件的shell脚本上使用sed

时间:2010-10-13 12:48:42

标签: unix shell sed

Hello友好的计算人员,

这是一个两部分问题。我正在编写两个shell脚本,目的是在文件夹及其子文件夹中的所有index.php文件中执行“查找和替换”。

第一个shell脚本是:

echo "running on all directories…"

find . -name '*.php' -exec ./search_replace.sh {} \;

然后运行文件search_replace:

echo "running search and replace script..."

sed -e 's/http:\/\/ericbrotto.com/file:\/\/\/Users\/ericbrotto\/Documents\/Portfolio_CV_etc.\/Offline_Portfolio/g' index.php > index.htm

我的问题/疑问是:

  1. 当我运行第一个脚本时,它回显“运行搜索并替换脚本...”13次,这是有道理的,因为文件夹中有13个index.php文件。但结果是只完成了一个文件,即单词被替换,新的htm文件只创建一次。

  2. 无论如何都要这样做,以便不是基于.php文件创建一个新的.htm文件,而是可以使用相同的index.php文件替换单词?换句话说,他们可以编辑文件而无需创建新文件。

  3. 非常感谢,

2 个答案:

答案 0 :(得分:1)

由于完整路径名被发送到您的search_replace.sh,您可以将index.php替换为$ 1,index.htm替换为$ 1.htm,然后

mv $1.htm $1

作为sed之后的一行

re:你的评论

原创

sed -e 's/http:\/\/ericbrotto.com/file:\/\/\/Users\/ericbrotto\/Documents\/Portfolio_CV_etc.\/Offline_Portfolio/g' index.php > index.html

第s / b行

sed -e 's/http:\/\/ericbrotto.com/file:\/\/\/Users\/ericbrotto\/Documents\/Portfolio_CV_etc.\/Offline_Portfolio/g' $1 > $1.html
mv $1.html $1

答案 1 :(得分:0)

find . -name '*.php' -type f -exec sed -i 's|http:\/\/ericbrotto.com|file:\/\/\/Users\/ericbrotto\/Documents\/Portfolio_CV_etc.\/Offline_Portfolio|g' "{}" +;