9.15 在搜索结果中进行搜索
grep | grep
如果要列出John Coltrane在其音乐生涯最后两年发行的专辑,该怎么办呢?非常简单。如下所示:
$ ls -1 | grep 196[6-7]
1966_Live_at_the_Village_Vanguard_Again!
1966_Live_in_Japan
1967_Expression
1967_Olatunji_Concert_Last_Live_Recording
1967_Stellar_Regions
如果将范围设置为[5-7]
,结果会得到比1966到1967年更长的列表。到目前为止,一切顺利,但如果不想包括任何演唱会专辑,又该怎么办呢(这通常是一个可怕的错误,但我们这里只是假设有这样的需求)?解决办法如下所示:
$ ls -1 | grep 196[6-7] | grep -v Live
1967_Expression
1967_Stellar_Regions
-v
选项(在9.13节中介绍过)用于剔除包含Live
的行,但这里真正有趣的地方是:如何提取ls -1
的输出,再把它通过管道传递给grep 196[6-7]
,然后再把来自过滤器的输出通过管道传给第二个grep
命令实例,正是由这个实例来使用-v Live
。最终得到的就是想要的结果:所有在1966年到1967年之间发行的John Coltrane的专辑,而且在标题中没有包含Live。朋友们,从这种简单的方式中看到Linux命令行的强大威力了吧!