grep
Agenda
概述
• grep命令用于在查找指定的模式, 并且输出
  出匹配该模式的行, grep命令的输入可以是
  文件/标准输入/管道, 其中管道是指将另一
  个命令的结果作为grep命令的输入, 这很常
  见;
• grep命令衍生了很多其他的变种, 比如
  egrep/fgrep等, 这里只介绍基本的grep命令.
用法说明
• grep命令使用如下格式:
  1, grep pattern file1 file2...
  从一个或者多个文件中查找模式并且输出; 如果指定了多个文件
  则会首先输出文件名称, 然后输出匹配行.
  2, command | grep pattern
  从其他命令的输出中查找模式并打印;
  3, grep pattern
  在标准输入中查找模式并打印.
• 示例:
  grep hello textfile # 查找textfile包含hello的行
  ls | grep .*txt        # 查找当前目录下文件名以txt结尾的
                         所有文件
  grep hello             # 用户每输入一行就对该行进行匹配,
                         如果该行包含hello则打印
• 注意: 使用grep命令时, 最好使用引号将需要匹配的模式括起来.
元字符 & 命令选项
• grep命令使用的正则表达式元字符基本上与vim的相
  同, 具体可以参考vim元字符《 3, Regular Expression.pptx 》
• grep命令有如下常用选项:
  -c 仅打印匹配的行数, 不打印行的内容
  -i 模式匹配时忽略大小写
  -h 不显示文件名称
  -l 仅列出匹配文件的文件名, 每个文件仅列出一次,
      文件名之间使用换行符分隔
  -n 在输出的每一行前加上该行在文件中的行号
  -v 显示不匹配的行
退出状态
• grep命令在执行完成时, 会设置一个程序退
  出状态码, 使用$?查看. 如果找到了匹配相应
  模式的行, 状态为0; 如果没有找到则设置为
  1, 如果查找的文件不存在则设置为2. 示例:
用法示例
• 示例:
  grep ‘<Tom>’ file        # 输出包含单词Tom的行
  grep ‘Tom Savage’ file     # 输出包含Tom Savage的行
  grep ‘^Tommy’ file         # 输出以Tommy开头的行
  grep ‘.bak$’ file         # 输出以.bak结尾的行
  grep ‘[Pp]yramid’ *        # 输出当前目录所有文件包含
                             Pyramid或pyramid的行
  grep ‘[A-Z]’ file          # 输出至少包含一个大小字母的行
  grep ‘[0-9]’ file          # 输出至少包含一个数字字符的行
  grep -v ‘Mary’ file        # 输出所有不包含Mary的行
  grep -i ‘sam’ file         # 输出包含sam的行, 不区分大小写
  grep -l ‘Dear Boss’ *      # 列出所有包含Dear Boss的文件名
  grep -n ‘Tom’ file         # 输出包含Tom的行, 并加上行号
  grep “$name” file          # 展开变量name的值, 然后输出所有
  包含该值的行
  ps -ef | grep ‘^ *user1’   # 查找user1用户的进程
END

4, grep

  • 1.
  • 2.
  • 3.
    概述 • grep命令用于在查找指定的模式, 并且输出 出匹配该模式的行, grep命令的输入可以是 文件/标准输入/管道, 其中管道是指将另一 个命令的结果作为grep命令的输入, 这很常 见; • grep命令衍生了很多其他的变种, 比如 egrep/fgrep等, 这里只介绍基本的grep命令.
  • 4.
    用法说明 • grep命令使用如下格式: 1, grep pattern file1 file2... 从一个或者多个文件中查找模式并且输出; 如果指定了多个文件 则会首先输出文件名称, 然后输出匹配行. 2, command | grep pattern 从其他命令的输出中查找模式并打印; 3, grep pattern 在标准输入中查找模式并打印. • 示例: grep hello textfile # 查找textfile包含hello的行 ls | grep .*txt # 查找当前目录下文件名以txt结尾的 所有文件 grep hello # 用户每输入一行就对该行进行匹配, 如果该行包含hello则打印 • 注意: 使用grep命令时, 最好使用引号将需要匹配的模式括起来.
  • 5.
    元字符 & 命令选项 •grep命令使用的正则表达式元字符基本上与vim的相 同, 具体可以参考vim元字符《 3, Regular Expression.pptx 》 • grep命令有如下常用选项: -c 仅打印匹配的行数, 不打印行的内容 -i 模式匹配时忽略大小写 -h 不显示文件名称 -l 仅列出匹配文件的文件名, 每个文件仅列出一次, 文件名之间使用换行符分隔 -n 在输出的每一行前加上该行在文件中的行号 -v 显示不匹配的行
  • 6.
    退出状态 • grep命令在执行完成时, 会设置一个程序退 出状态码, 使用$?查看. 如果找到了匹配相应 模式的行, 状态为0; 如果没有找到则设置为 1, 如果查找的文件不存在则设置为2. 示例:
  • 7.
    用法示例 • 示例: grep ‘<Tom>’ file # 输出包含单词Tom的行 grep ‘Tom Savage’ file # 输出包含Tom Savage的行 grep ‘^Tommy’ file # 输出以Tommy开头的行 grep ‘.bak$’ file # 输出以.bak结尾的行 grep ‘[Pp]yramid’ * # 输出当前目录所有文件包含 Pyramid或pyramid的行 grep ‘[A-Z]’ file # 输出至少包含一个大小字母的行 grep ‘[0-9]’ file # 输出至少包含一个数字字符的行 grep -v ‘Mary’ file # 输出所有不包含Mary的行 grep -i ‘sam’ file # 输出包含sam的行, 不区分大小写 grep -l ‘Dear Boss’ * # 列出所有包含Dear Boss的文件名 grep -n ‘Tom’ file # 输出包含Tom的行, 并加上行号 grep “$name” file # 展开变量name的值, 然后输出所有 包含该值的行 ps -ef | grep ‘^ *user1’ # 查找user1用户的进程
  • 8.