如何在目录中的每个文件中用'php'替换'php3'

时间:2008-11-21 03:58:28

标签: php regex string bash replace

希望是一个很简单的。

我有一个php3网站,我想在php 5.2上运行

首先,我想将每个对当前“index.php3”_within_each_file_(递归)的引用更改为“index.php”,然后继续担心全局变量等。

ķ。去!

:)

更新:非常感谢!我意识到我的问题错过了引用在网站的每个文件中的事实,我想在所有文件/文件夹中递归地进行。

4 个答案:

答案 0 :(得分:5)

find -type f -exec perl -pi -e 's/\bindex\.php3\b/index.php/g' {} \;

答案 1 :(得分:4)

怎么样:

for file in *.php3
do
    sed 's/\.php3/.php/g' $file > ${file%3}
done

for / do / done循环依次处理每个.php3文件,编辑文件并用.php3替换每个字符串.php,并将文件从something.php3复制到something.php

为修正后的问题添加:

for file in $(find . -type f -name '*.php3' -print)
do
    sed 's/\.php3/.php/g' $file > ${file%3}
done

这些天通常可以省略'-print',但从历史上看,很多机器时间被忘记添加它的人浪费了,因为最初(POSIX之前)没有默认操作。

这个片段是关于原始代码进行扩展任务的最简单修改,但不一定是最好的方法 - 它在处理之前预先生成整个文件列表。你可以改用:

find . -type f -name '*.php3' -print |
while read file
do
    sed 's/\.php3/.php/g' $file > ${file%3}
done

但是,如果文件名或路径名可以包含空格或换行符或其他此类字符,则修改后的版本都会遇到问题。要避免此类问题,您必须更加努力 - 使用Perl或(GNU find + xargs)或其他一些技术。如果你理智,你可以避免这些问题。如果你继承了一个不太完全理智的设置,那么你可能需要深入研究Unix文件名处理的基础。

答案 2 :(得分:2)

sed -i 's/php3/php/g' *

假设您使用的是类似Unix的操作系统。

答案 3 :(得分:1)

要以递归方式执行此操作,请使用Jonathan的答案,但将find . -type f替换为* .php3。请注意,后面的刻度很重要,你可以用任何目录替换“。” (即当前目录)。这是一个版本,也在过程中重命名文件(* .php3 - > * .php)。

#!/bin/bash
for file in `find . -type f`
do
    sed 's/\.php3/\.php/g' $file > ${file//3/}
    rm $file
done
相关问题