首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结合grep -v和grep -r?

结合grep -v和grep -r?
EN

Stack Overflow用户
提问于 2015-08-10 19:35:42
回答 3查看 307关注 0票数 1

我希望从给定目录中的所有文件中删除整行文本。我知道我可以使用grep -v foo filename一次完成一个文件。我知道我可以使用grep -r foo递归地搜索一个目录。如何结合这些命令从目录中的所有文件中删除给定的文本行?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-11 01:43:04

我认为这是可行的:

grep -ilre 'Foo' . | xargs sed -i 'extension' 'Foo/d'

其中'extension'引用对文件名的添加。它将复制原来的文件与您指定的扩展名和修改后的文件将有原始文件名。我添加了-i,以防您要求它不区分大小写。

修改后的file1变成" file1“原始file1变为"file1extension”

invalid command code ., despite escaping periods, using sed

其中一个响应表明,OSX中sed-i选项的更新版本略有不同,因此您需要添加一个扩展名。该文件被解释为命令,这就是为什么您会看到这个错误。

票数 0
EN

Stack Overflow用户

发布于 2015-08-10 21:23:57

试一试如下:

代码语言:javascript
复制
grep -vlre 'foo' . | xargs sed -i 's/pattern/replacement/g'

分解:

代码语言:javascript
复制
grep:
  -v 'Inverse match'
  -l 'Show filename'
  -r 'Search recursively'
  -e 'Extended pattern search'

xargs: For each entry perform

sed -i: replace inline 
票数 1
EN

Stack Overflow用户

发布于 2015-08-10 21:57:00

查找文件的UNIX命令名为find,而不是grep。忘记您曾经听说过grep -r只是个坏主意,下面是查找文件并对它们执行一些操作的正确方法:

代码语言:javascript
复制
find . -type f -print | xargs sed -i '/badline/d'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31927696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档