我试着做这样的事
vi `grep -Rl 'keyword'`但是我想支持文件名中的空格。
vi "`grep -Rl 'keyword'`"不执行我需要的操作,它将grep输出在一个带有\n的参数中。
我试过了
vi "`grep -Rl 'keyword'`| xargs"虽然看起来更好,但结果仍然是一个参数(现在使用空格而不是\n)。
有什么好办法吗?Bash很好,POSIX兼容的奖励积分。
PS。
我知道-R选项并不适用于所有grep实现,而bash对于``有一个很好的可嵌套的"$()“表示法。
发布于 2019-03-29 23:24:25
使用find:
find . -type f -exec grep -q 'pattern' {} \; -exec vi {} +这将查看当前目录中或当前目录下的每个常规文件,以查找与pattern匹配的行。对于这些找到的文件,将启动vi。
如果有几百个这样的文件,那么批文件就会调用vi。将-exec vi {} +更改为-exec vi {} \;,为每个文件调用vi一次。
我们使用grep -q,因为我们实际上对grep的输出并不感兴趣,只对它的退出状态感兴趣。
这将允许任何有效的Unix文件名,并且完全符合POSIX (递归grep不兼容)。
发布于 2019-03-29 22:25:52
怎么样
grep -Rl 'pattern' | xargs -d '\n' vi我不知道POSIXy的-d选项是什么。
如果您有GNU工具,这最好允许任何文件名:
grep -Rlz 'pattern' | xargs -0 vihttps://unix.stackexchange.com/questions/509516
复制相似问题