将所有包含某个单词的行替换为文件夹中所有PHP文件中的新单词

时间:2017-01-20 19:40:52

标签: php linux sed

假设我有一个包含许多php文件的文件夹,其中一些php文件有一行有特定的单词,我需要一个linux命令行找到所有包含特定单词的文件行)并用另一个单词替换那些行 例如:

     $source = $_FILES['fupload']['tmp_name'];
     $target = "upload/".$_FILES['fupload']['name'];
     move_uploaded_file( $source, $target );// or die ("Couldn't copy");
     $size = getImageSize( $target );

在上面的代码中,它是php文件的一部分,假设特定的单词是“fupload”,我们想在运行linux命令行后用“echo”替换该行,它就变成了这个:

     echo
     $target = "upload/".$_FILES['fupload']['name'];
     move_uploaded_file( $source, $target );// or die ("Couldn't copy");
     $size = getImageSize( $target );

并且此过程对具有这种情况的所有phph文件执行。

我找到了这段代码,但是这段代码只删除了包含特定单词的行,但是我需要用另一个单词替换所有这些行:

      find /var/www/website -type f -exec sed -i '/$vjfegamd/d' {} ';'

1 个答案:

答案 0 :(得分:1)

要仅替换fupload的第一次出现(如示例代码中所示),请尝试以下操作:

find . -name '*.php' -print0 -exec sed -i.bak '0,/fupload/c echo' {} \;

c命令使用命令后的字符串更改整行。

在编辑之前,所有文件都会以.bak扩展名保存。

由于某些sed风格要求c后面跟一个新行,你可以试试这个结果:

find . -name '*.php' -print0 -exec sed i.bak '0,/fupload/s//echo/' {} \;