我已经设法通过使用grep关键字的出现
grep "KeyWord" . -r -n -i -I
但是,关键字的出现次数过多。我只想删除包含该单词的所有行。
我四处搜寻,sed看起来像是实用程序。谁能告诉我什么命令可以解决这个问题?
谢谢。
我已经设法通过使用grep关键字的出现
grep "KeyWord" . -r -n -i -I
但是,关键字的出现次数过多。我只想删除包含该单词的所有行。
我四处搜寻,sed看起来像是实用程序。谁能告诉我什么命令可以解决这个问题?
谢谢。
Answers:
使用GNU sed:
find . -type f -print0 | xargs -0 sed -i /KeyWord/d
使用OSX sed:
find . -type f -print0 | xargs -0 sed -i '' /KeyWord/d
第一个命令find
查找所有标准文件(不是目录,管道或其他文件),并以\0
空格分隔打印(因此文件名可以包含空格,换行符等)。
第二个命令xargs
读取的输出find
,基于分隔符(\0
由于-0
)sed -i [...]
获取列表,从列表中添加参数调用(sed
如果有很多文件,则将多次调用,因为参数的最大长度受限制)每次调用)。
该sed
命令就地修改(-i
)。
至于/KeyWord/d
,它将删除包含正则表达式的行KeyWord
。
您应该学会sed
正确理解(简单但不寻常的)语法,并参阅相应的联机帮助页以获取有关此处涉及的工具的更多信息。
正如我要推广的那样zsh
,具有扩展glob的解决方案:
sed -i /KeyWord/d **/*(.)
s/KeyWord//g
(KeyWord
用”(空字符串)替代g
所有(不仅是每行的第一个)