如何将目录中每个文件中的“php3”替换为“php”

如何将目录中每个文件中的“php3”替换为“php”,php,regex,string,bash,replace,Php,Regex,String,Bash,Replace,希望是一个很好的简单的 我有一个php3网站,我想在PHP5.2上运行 首先,我想让每个文件中对当前index.php3的引用递归地更改为index.php,然后继续担心全局变量等 去吧 : 更新:非常感谢!我意识到我的问题忽略了一个事实,即引用在网站的每个文件中,我想在所有文件/文件夹中递归地进行引用。sed-I's/php3/php/g'* 假设您使用的是类unix操作系统。sed-i's/php3/php/g'* 假设您使用的是类unix操作系统。那么: for file in *.php

希望是一个很好的简单的

我有一个php3网站,我想在PHP5.2上运行

首先,我想让每个文件中对当前index.php3的引用递归地更改为index.php,然后继续担心全局变量等

去吧

:

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

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

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

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

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

那么:

for file in *.php3
do
    sed 's/\.php3/.php/g' $file > ${file%3}
done
for/do/done循环依次处理每个.php3文件,编辑文件并将每个字符串.php3替换为.php,然后将文件从something.php3复制到something.php

经修正的问题增加:

“-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文件名处理的奥秘。

如何:

for file in *.php3
do
    sed 's/\.php3/.php/g' $file > ${file%3}
done
for/do/done循环依次处理每个.php3文件,编辑文件并将每个字符串.php3替换为.php,然后将文件从something.php3复制到something.php

经修正的问题增加:

“-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文件名处理的奥秘。

要递归地执行此操作,请使用Jonathan的答案,但替换为find-为*.php3输入f。请注意,回勾非常重要,您可以用任何目录替换回勾。i、 e.当前目录。下面是一个版本,它还重命名了进程*.php3->*.php中的文件

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

要递归地执行此操作,请使用Jonathan的答案,但替换为find-为*.php3输入f。请注意,回勾非常重要,您可以用任何目录替换回勾。i、 e.当前目录。下面是一个版本,它还重命名了进程*.php3->*.php中的文件

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

还有一个是GNU sed,它不适用于非GNU版本的sed。小题大做,@Jonathan-你现在很难找到一个没有GNU sed的UNIX。给我找一个运行PHP的类UNIX系统,它没有GNU版本的sed:@Brian:任何基于BSD的机器,比如FreeBSD、NetBSD或Mac OS X。Solaris、AIX、HP-UX,仅举三个例子。还有一个是GNU-sed——这对非GNU版本的sed不起作用。小题大做,@Jonathan——你现在很难找到一个没有GNU-sed的UNIX。给我找一个运行PHP的类UNIX系统,它没有GNU版本的sed:@Brian:任何基于BSD的机器,如FreeBSD、NetBSD或Mac OS X。Solaris、AIX、HP-UX,仅举三个。嗨,乔纳森。谢谢,但我需要更改每个文件中的php3引用。php3的唯一文件是index.php3,所有代码都在调用它:因此需要更改。干杯。基本技术保持不变——主要区别在于调整细节。如果文件已重命名,请使用“sed…”$文件>tmp.$$;mv$文件旧。$文件;例如,mv tmp.$$$文件。或者使用“perl-i.bak”和适当的代码。或者…嘿,乔纳森。谢谢,但我需要更改每个文件中的php3引用。php3的唯一文件是index.php3,所有代码都在调用它:因此需要更改。干杯。基本技术保持不变——主要区别在于调整细节。如果文件已重命名,请使用“sed…”$文件>tmp.$$;mv$file-ol
d、 $file;例如,mv tmp.$$$文件。或者使用“perl-i.bak”和适当的代码。或者…嘿,我在webdir的根目录下制作了一个新的脚本,当然,并运行了它。它吃掉了目录中的所有文件,除了它重命名的index.php。结果很奇怪。你是在哪个操作系统下尝试的?这个脚本没有吃掉我OS X系统上的任何文件。它吃掉了目录中的所有文件,除了它重命名的index.php。结果很奇怪。你是在哪个操作系统下尝试的?脚本没有吃掉我的OS X系统上的任何文件。komodo有这样做的功能。komodo有这样做的功能。