递归地从所有文件中查找和删除行

Sur*_*ani 15 grep sed

我已经设法通过使用 grep 关键字的出现

grep "KeyWord" . -r -n -i -I 
Run Code Online (Sandbox Code Playgroud)

但是,KeyWord 出现的次数太多了。我只想删除包含该词的所有行。

我四处搜索, sed 看起来像是实用程序。谁能告诉我什么命令可以解决问题?

谢谢。

Pie*_*ier 26

使用 GNU sed:

find . -type f -print0 | xargs -0 sed -i /KeyWord/d
Run Code Online (Sandbox Code Playgroud)

使用 OSX sed:

find . -type f -print0 | xargs -0 sed -i '' /KeyWord/d
Run Code Online (Sandbox Code Playgroud)

第一个命令find查找所有标准文件(不是目录、管道等),将它们分开打印\0(因此文件名可以包含空格、换行符等)。

第二个命令xargs读取 的输出find,根据分隔符(\0因为-0)抓取一个列表,sed -i [...]从列表中添加参数调用(sed如果有很多文件,将被多次调用,因为参数的最大长度在每次调用)。

sed命令就地修改 ( -i)。

至于/KeyWord/d,它将删除包含正则表达式的行KeyWord

您应该学会sed正确理解(简单但不寻常的)语法,并参考相应的联机帮助页以获取有关此处涉及的工具的更多信息。


正如我喜欢推广的那样zsh,带有扩展球体的解决方案:

sed -i /KeyWord/d **/*(.)
Run Code Online (Sandbox Code Playgroud)