美文网首页DL&NN程序员荷花宝典
Linux 命令 ‘grep’ 的或与非

Linux 命令 ‘grep’ 的或与非

作者: 默念2009 | 来源:发表于2016-09-03 14:15 被阅读6389次

    导语

    grep, print lines matching a pattern。 本文是翻译文章,翻译自 grep-or-and-not-operators
    习惯了英文者,可自行前往阅读。

    对于‘grep’,我们有OR和NOT操作符,却没有AND。不过,我们可以模拟一个。下面的例子会帮助你弄懂如何在Linux ‘grep’命令中使用OR、AND和NOT。

    employee.txt 文件会在接下来的例子中使用。
    $ cat employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500 500 Randy Manager Sales $6,000

    1. ‘grep’ OR

    这里有4种方法可以实现‘grep’ OR 。我更倾向于第三种。

    1.1 ‘gerp’ OR 使用 '|'

    如果你使用 ‘grep’ 命令不带任何选项,你需要使用 ‘|’ 来作OR条件的分隔符。

    grep 'pattern1\|pattern2' filename

    比如,你想打印出employee.txt中的TachSales。没有 ‘\’ 在 ‘|’ 之前,下面的命令是没有用的。

    $ grep 'Tech\|Sales' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 500 Randy Manager Sales $6,000

    1.2 ‘gerp’ OR 使用 ‘-E’

    ‘grep’ ‘-E’ 选项表示使用扩展的正则表达式。如果你使用 ‘grep’ 命令时带 ‘-E’,你只需要用途 ‘|’ 来分隔OR条件。

    grep -E 'pattern1|pattern2' filename

    打印出employee.txt中的TachSales

    $ grep -E 'Tech|Sales' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 500 Randy Manager Sales $6,000

    1.3 ‘gerp’ OR 使用 ‘egrep’

    ‘egrep’ 就是 ‘grep -E’。所以

    $ egrep 'Tech|Sales' employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 500 Randy Manager Sales $6,000

    1.4 ‘gerp’ OR 使用 ‘grep -e’

    使用 ‘grep -e’ 选项你仅可以传递一个参数。在一个命令中使用多个 ‘-e’ 选项可以指定多个OR条件。Example:

    $ grep -e Tech -e Sales employee.txt 100 Thomas Manager Sales $5,000 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 500 Randy Manager Sales $6,000

    2. ‘grep’ AND

    ‘grep’ 命令没有 AND 操作符。但是,上文说了,我们可以模拟它。

    2.1 ‘grep’ AND 使用 ‘-E pattern1.*pattern2’

    grep -E 'pattern1.*pattern2' filename grep -E 'pattern1.*pattern2|pattern2.*pattern1' filename

    Example:

    $ grep -E 'Dev.*Tech' employee.txt 200 Jason Developer Technology $5,500

    2.2 ‘grep’ AND 使用多个 ‘grep’ 命令

    你还可以使用多个 ‘grep’ 命令加管道(pipe)的方式来实现 AND 操作。

    grep -E 'pattern1' filename | grep -E 'pattern2'

    Example:

    $ grep Manager employee.txt | grep Sales 100 Thomas Manager Sales $5,000 500 Randy Manager Sales $6,000

    3. ‘grep’ NOT

    使用 ‘grep -v’ 你可以模拟NOT操作。

    -v, --invert-match
    Invert the sense of matching, to select non-matching lines.

    使用 ‘-v’ 选项来反向匹配,选择不匹配的行。

    grep -v 'pattern1' filename

    举个例子,打印出所有不包含关键词 “Sales” 的 行:

    $ grep -v Sales employee.txt 200 Jason Developer Technology $5,500 300 Raj Sysadmin Technology $7,000 400 Nisha Manager Marketing $9,500

    相关文章

      网友评论

      本文标题:Linux 命令 ‘grep’ 的或与非

      本文链接:https://www.haomeiwen.com/subject/jfmkettx.html