【发布时间】:2012-03-09 07:08:38
【问题描述】:
我想要所有带有 assert_equal 而没有 amazon 的行。
我试过了,但是没有用。
ack assert_equal | xargs ack -v amazon
【问题讨论】:
-
@DigitalRoss,ack 是一个查找和 grep 实用程序。另见betterthangrep.com
-
这应该迁移到超级用户了。
我想要所有带有 assert_equal 而没有 amazon 的行。
我试过了,但是没有用。
ack assert_equal | xargs ack -v amazon
【问题讨论】:
你不需要 xargs:
ack assert_equal | ack -v amazon
【讨论】:
您的命令似乎存在一些问题。第一部分:
ack assert_equal
您没有提供文件名,因此ack 没有要处理的内容。在第二部分:
xargs ack -v 亚马逊
您正在使用xargs 将初始ack 的结果作为命令行参数提供给第二个ack,这可能不是您想要的。 ack 已经设计为接受标准输入数据,因此您根本不需要使用 xargs。
下面是一个更好的说法:
ack assert_equal 文件名 | ack -v 亚马逊
或者,如果您从另一个命令获取输出,例如:
我的命令 | ack assert_equal | ack -v 亚马逊
【讨论】:
ack(如上面 Dave Bacher 所述)在使用单个参数运行时不会返回任何数据(至少在我的机器上)。另一个ack 程序,汉字代码转换器,将输出按原样提供的任何文本文件,但它不接受 -v 参数,所以我猜不是它。您可能正在使用第三个ack 吗?
这个 sn-p 应该让你知道你需要做什么。神奇之处在于 -print0 选项。不是直接的解决方案;我觉得很懒。
ack -f --print0 --php -G 'scripts' --invert-file-match|xargs -0 ls -l
【讨论】:
ack 不是 *nix 中的标准工具。既然你有了它,它就可以了。但是如果你在一个没有它的 *nix 系统上,你可以这样做
awk '/assert_equal/&&!/amazon/' file
【讨论】: