首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >"grep -Rl“结果为vi参数,具有适当的空间支持。

"grep -Rl“结果为vi参数,具有适当的空间支持。
EN

Unix & Linux用户
提问于 2019-03-29 21:48:29
回答 2查看 183关注 0票数 0

我试着做这样的事

代码语言:javascript
复制
vi `grep -Rl 'keyword'`

但是我想支持文件名中的空格。

代码语言:javascript
复制
vi "`grep -Rl 'keyword'`"

不执行我需要的操作,它将grep输出在一个带有\n的参数中。

我试过了

代码语言:javascript
复制
vi "`grep -Rl 'keyword'`| xargs"

虽然看起来更好,但结果仍然是一个参数(现在使用空格而不是\n)。

有什么好办法吗?Bash很好,POSIX兼容的奖励积分。

PS。

我知道-R选项并不适用于所有grep实现,而bash对于``有一个很好的可嵌套的"$()“表示法。

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2019-03-29 23:24:25

使用find

代码语言:javascript
复制
find . -type f -exec grep -q 'pattern' {} \; -exec vi {} +

这将查看当前目录中或当前目录下的每个常规文件,以查找与pattern匹配的行。对于这些找到的文件,将启动vi

如果有几百个这样的文件,那么批文件就会调用vi。将-exec vi {} +更改为-exec vi {} \;,为每个文件调用vi一次。

我们使用grep -q,因为我们实际上对grep的输出并不感兴趣,只对它的退出状态感兴趣。

这将允许任何有效的Unix文件名,并且完全符合POSIX (递归grep不兼容)。

票数 1
EN

Unix & Linux用户

发布于 2019-03-29 22:25:52

怎么样

代码语言:javascript
复制
grep -Rl 'pattern' | xargs -d '\n' vi

我不知道POSIXy的-d选项是什么。

如果您有GNU工具,这最好允许任何文件名:

代码语言:javascript
复制
grep -Rlz 'pattern' | xargs -0 vi
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/509516

复制
相关文章

相似问题

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