如何使用Linux CLI查找一行代码并从特定/目录中的所有文件中删除该行

How to find a line of code and delete that line from all files in a certain /directory only, using Linux CLI

所以我用这个查找/directory中包含代码"test"的所有文件

grep -R"test" /directory

现在我想一次删除在/directory中所有文件中找到的代码。

只是在其中检测到的每个文件的代码行。

更新***

我想删除注入代码@require(dirname(__FILE__).'/php/malware.php');

所以这是做了,但不起作用。未显示错误消息。它只接受命令。

grep -l -R '@require(dirname(__FILE__).'/php/malware.php');' /directory | xargs -I {} sed -i.bak 's/@require(dirname(__FILE__).'/php/malware.php');//g' {}


如果您只想删除文件的test模式,而不想删除整个行(在大多数情况下会破坏代码),则可以使用以下命令:

1
grep -l -R 'test' /directory | xargs -I {} sed -i.bak 's/test//g' {}

它将以零替换测试模式,并在执行操作时备份文件!你永远不知道——)

如果您确定可以删除包含test模式的整行,则可以按以下方式使用sed:

1
grep -l -R 'test' /directory | xargs -I {} sed -i.bak '/test/d' {}

如果不再需要备份文件,可以使用以下命令查找备份文件并将其删除:

1
find /directory -type f -name '*.bak' -exec rm -i {} \;

如果在删除文件时不需要确认,可以在rm之后删除-i


应将文件名通过管道发送到SED:

1
grep -l -R"test" /directory | xargs -I {} sed -i '/test/d' {}

在哪里?

  • -L表示grep只打印文件名
  • /test/d是用来删除与测试模式匹配的行的sed命令
  • -我告诉SED将结果写入同一个文件,否则只会将鞋输出