![为什么我不能通过管道确认?](https://linux22.com/image/63147/%E4%B8%BA%E4%BB%80%E4%B9%88%E6%88%91%E4%B8%8D%E8%83%BD%E9%80%9A%E8%BF%87%E7%AE%A1%E9%81%93%E7%A1%AE%E8%AE%A4%EF%BC%9F.png)
因此,我一直在尝试使用grep
Mercurial 日志中提取一些内容,并试图避免使用awk
只是为了看看我是否可以在没有它的情况下完成,但失败了,因为既不grep
也不egrep
支持完整的现代正则表达式。
grep 会发生这种情况:
$ hg log <filename> | grep changeset
changeset: 3651:d23495ab1168
changeset: 2974:6aa71cb2c575
changeset: 2756:9dd7fb635678
changeset: 2532:d3ced9af4d6c
changeset: 2459:9d5f5553b851
changeset: 1835:4558836beed1
changeset: 1628:517d0239e830
changeset: 1486:114bce51254d
changeset: 1378:2b968e7fbd19
changeset: 1374:4e7772e48d00
这就是我想要的输出结果。但为了获得更好的正则表达式支持,我尝试使用ack
, aaaand....什么都不做。我缺少什么?检查了一堆例子,发现我在这里所做的没有什么区别。
$ hg log <filename> | ack changeset
$
没有输出。
也许我误解了这个工具?egrep
也没有得到足够的支持。我只是想用\s
:(
答案1
在 ack 文档页面上看到了这个,也许会有帮助?
--[no]filter Force ack to treat standard input as a pipe
(--filter) or tty (--nofilter)
答案2
尝试输入
awk '/changeset/ {print}'
答案3
聚会超级晚了,但 ack v3.3.1 管道工作正常。
$ git log | ack 'bar'
$ ack 'regex' log | ack 'bar'
我遇到这个问题是因为我需要运行一个复杂的正则表达式,而在时间紧迫的情况下我无法在一行中完成。
希望这对某人有帮助
答案4
ack
是安装在基于 Debian 的发行版上的默认软件包。如果您在运行时看到类似这样的消息,ack -h
那么您需要使用ack-grep
或按照以下步骤操作http://beyondgrep.com/install/在在 Debian 衍生发行版上重命名 ack-grep
尝试hg log <filename> | ack-grep changeset
查看 ack-grep 是否安装正确。