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

如何使用Linux CLI查找代码行并仅从特定/目录中的所有文件中删除该行,linux,Linux,所以我用它来查找/目录中包含代码“test”的所有文件 grep-R“test”/directory 现在我想一次删除/directory中所有文件中的代码 只需在每个文件中检测到该行代码 更新*** 我想删除插入的代码@require(dirname(_文件)'/php/malware.php') 这样做了,但不起作用。没有显示错误消息。它只接受命令 grep-l-R'@require(dirname(_文件).'/php/malware.php');'/目录| xargs-I{}sed-I.

所以我用它来查找/目录中包含代码“test”的所有文件

grep-R“test”/directory

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

只需在每个文件中检测到该行代码

更新***

我想删除插入的代码
@require(dirname(_文件)'/php/malware.php')

这样做了,但不起作用。没有显示错误消息。它只接受命令

grep-l-R'@require(dirname(_文件).'/php/malware.php');'/目录| xargs-I{}sed-I.bak的/@require(dirname(_文件)'/php/malware.php')//g'{}

应将文件名通过管道传输到:

其中:

  • -l表示要打印的grep
  • /test/d是sed测试模式
  • -我告诉sed将结果写入同一个文件,否则将只输出结果

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

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

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

grep -l -R 'test' /directory | xargs -I {} sed -i.bak '/test/d' {}
您可以在查找备份文件后,使用以下命令删除不再需要的备份文件:

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

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

是否应该删除整行?如果该行包含您的
测试
或仅包含
测试
,并保持该行的其余部分不变?有趣的考虑因素。可能需要将来参考。在一行代码中删除“代码>测试< /代码>而不是整行”的格式看起来如何?下面我将回答,最后但并非最不重要的,您是否有中间有空格的文件名?被告知永远不要那样做。如果他想删除包含
test
的整行内容,答案很好。但是,如果他只想删除
测试
行的一部分并保持该行的其余部分不变,则应在替换模式下使用
sed
,并通过适当的替换(最终使用反向引用)来更改包含
测试
的每一行。最后,我会将
-I
更改为
-I.bak
,以便对文件进行备份,以备不时之需
grep -l -R 'test' /directory | xargs -I {} sed -i.bak '/test/d' {}
find /directory -type f -name '*.bak' -exec rm -i {} \;