使用 grep 排除与特定查询不匹配的结果

使用 grep 排除与特定查询不匹配的结果
  • 我创建了一个包含以下内容的文件(testimdb):

    film: heat. year: 1995. director: michael mann. actors: al pacino, robert de niro, val kilmer
    film: the godfather part ii. year: 1974. director: francis coppola. actors: al pacino, robert de niro, diane keaton, robert duvall
    film: casino. year: 1995. director: martin scorsese. actors: robert de niro, sharon stone, joe pesci
    film: carlito's way. year: 1993. director: brian de palma. actors: al pacino, sean penn
    
  • 我可以 grep 查找帕西诺和德尼罗主演的所有电影(grep 'pacino\|de niro' /root/testimdb)。这会导致显示包含他们的名字的所有电影。

  • 然而,我想排除任何不是他们俩主演的电影——仅在同一部电影中一起主演。因此,上面的 grep 搜索示例对我不起作用,因为它正确返回包含同一部电影中的两位明星的结果(《热火》、《教父 2》),并且它还检索他们不盯着对方的电影的结果。例如,《赌场》由德尼罗主演,但帕西诺没有主演;《卡利托之路》只有帕西诺主演,而不是德尼罗主演。

  • 如何让 grep 只显示帕西诺和德尼罗共同主演的电影的结果,而忽略所有其他结果?

谢谢,戴夫

答案1

grep这可以通过如下管道来完成grep(尽管我确信有更有效的方法):

grep 'de niro' testimdb | grep 'pacino'

在以下位置使用扩展正则表达式grep

grep -E 'de niro.*pacino|pacino.*de niro' testimdb

相关内容