【问题标题】:Grep multiple stringsgrep 多个字符串
【发布时间】:2017-02-03 15:52:26
【问题描述】:

我想查找有 A 但没有 B 和 C 的文件列表。

grep -r -L 'B\|C' 找到没有 B 和 C 的,但是如何添加有 A 的条件呢?

【问题讨论】:

    标签: linux grep


    【解决方案1】:

    如果我正确理解您的问题:

    grep -l "A" $(grep -r -E -L "B|C" *)
    

    即在原始命令生成的文件列表中搜索包含“A”的文件。

    【讨论】:

    • 这个还返回一个列表,其中包含BC
    【解决方案2】:

    您可以通过选项-P--perl-regexp 使用negative lookahead in grep

    grep -r -P -L '^(?!.*A).*$|B|C'
    

    【讨论】:

    • 出于某种原因,它仍然给我一个带有B的列表
    • 您可以删除-l 选项并显示匹配字符串
    • 它返回一个包含A 的列表,但它不检查它是否包含BC
    • 试试grep -r -P -L '^(?!.*lower\.html).*$|DetVehicle|customer'
    • 改成马克的回答
    【解决方案3】:

    如果我正确理解了您的问题,您可以这样做:

    grep "A" file.txt | grep -v -e "B" -e "C"
    

    第一个grep 查找包含A 的行,第二个grep 获取结果并删除包含“B”或“C”的行。这通过反转匹配的-v 标志起作用。

    【讨论】:

    • 我运行了grep -r -l "lower\.html" | grep -v -e "DetVehicle" -e "customer",它返回了一个包含lower 但也有Vehiclecustomer 的文件列表
    猜你喜欢
    • 2014-12-21
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多