【问题标题】:replace all lines which contain a certain word with a new word in all PHP files in a folder用新词替换文件夹中所有 PHP 文件中包含某个词的所有行
【发布时间】:2017-01-21 04:10:27
【问题描述】:

假设我有一个包含许多 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' {} ';'

【问题讨论】:

  • 您想替换 fupload 的每个实例,因为从技术上讲,$target 也应该被替换?
  • 如果fuploaded 出现在您的输入中怎么办 - 该行也会被替换吗?您要查找的“单词”是否包含正则表达式元字符?它是否可以包含非字母字符(如果是,您如何定义“单词”)?

标签: php linux sed


【解决方案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/' {} \;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 2020-11-15
    • 2014-01-18
    • 2018-08-10
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多