如何使用Linux CLI查找代码行并仅从特定/目录中的所有文件中删除该行
所以我用它来查找/目录中包含代码“test”的所有文件如何使用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.
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 {} \;