grep 命令系列:如何在 Linux/UNIX 中使用 grep 命令

简介:

grep 命令系列:如何在 Linux/UNIX 中使用 grep 命令


我该怎样在 Linux、Apple OS X 及其他类 UNIX 系统中使用 grep 命令,你能给我展示一些简单的例子吗?

grep 命令用来搜索文本,或从给定的文件中搜索行内包含了给定字符串或单词的文件。通常来说,grep 显示匹配到的行。使用 grep 来搜索包括一个或多个正则表达式匹配到的文本行,然后只显示匹配到的行。grep 被视作在 Linux/ Unix 系统中最有用的命令之一。

你知道吗

grep 这个名字,来源于一个 Unix/Linux 中的古老的行编辑器 ed 中执行相似操作的命令:


   
   
  1. g/re/p

grep 命令的语法

语法如下所示:


   
   
  1. grep 'word' 文件名
  2. grep 'word' 文件1 文件2 文件3
  3. grep 'word1\|word2' 文件名
  4. cat 某个文件 | grep '某个东西'
  5. command | grep '某个东西'
  6. command 选项1 | grep '数据'
  7. grep --color '数据' 文件名

怎么样使用 grep 来搜索一个文件

搜索 /etc/passwd 文件下的 boo 用户,输入:


   
   
  1. $ grep boo /etc/passwd

输出内容:


   
   
  1. foo:x:1000:1000:foo,,,:/home/foo:/bin/ksh

可以使用 grep 去强制忽略大小写。例如,使用 -i 选项可以匹配 boo, Boo, BOO 和其他组合:


   
   
  1. $ grep -i "boo" /etc/passwd

递归使用 grep

你可以递归地使用 grep 进行搜索。例如,在文件目录下面搜索所有包含字符串“192.168.1.5”的文件


   
   
  1. $ grep -r "192.168.1.5" /etc/

或者是:


   
   
  1. $ grep -R "192.168.1.5" /etc/

示例输出:


   
   
  1. /etc/ppp/options:# ms-wins 192.168.1.50
  2. /etc/ppp/options:# ms-wins 192.168.1.51
  3. /etc/NetworkManager/system-connections/Wired connection 1:addresses1=192.168.1.5;24;192.168.1.2;

你会看到搜索到 192.168.1.5 的结果每一行都前缀以找到匹配的文件名(例如:/etc/ppp/options)。输出之中包含的文件名可以加 -h 选项来禁止输出:


   
   
  1. $ grep -h -R "192.168.1.5" /etc/

或者


   
   
  1. $ grep -hR "192.168.1.5" /etc/

示例输出:


   
   
  1. # ms-wins 192.168.1.50
  2. # ms-wins 192.168.1.51
  3. addresses1=192.168.1.5;24;192.168.1.2;

使用 grep 去搜索文本

当你搜索 boo 时,grep 命令将会匹配 fooboo,boo123, barfoo35 和其他所有包含 boo 的字符串,你可以使用 -w 选项去强制只输出那些仅仅包含那个整个单词的行(LCTT译注:即该字符串两侧是英文单词分隔符,如空格,标点符号,和末端等,因此对中文这种没有断字符号的语言并不适用。)。


   
   
  1. $ grep -w "boo" file

使用 grep 命令去搜索两个不同的单词

使用 egrep 命令如下:


   
   
  1. $ egrep -w 'word1|word2' /path/to/file

(LCTT 译注:这里使用到了正则表达式,因此使用的是 egrep 命令,即扩展的 grep 命令。)

统计文本匹配到的行数

grep 命令可以通过加 -c 参数显示每个文件中匹配到的次数:


   
   
  1. $ grep -c 'word' /path/to/file

传递 -n 选项可以输出的行前加入匹配到的行的行号:


   
   
  1. $ grep -n 'root' /etc/passwd

示例输出:


   
   
  1. 1:root:x:0:0:root:/root:/bin/bash
  2. 1042:rootdoor:x:0:0:rootdoor:/home/rootdoor:/bin/csh
  3. 3319:initrootapp:x:0:0:initrootapp:/home/initroot:/bin/ksh

反转匹配(不匹配)

可以使用 -v 选项来输出不包含匹配项的内容,输出内容仅仅包含那些不含给定单词的行,例如输出所有不包含 bar 单词的行:


   
   
  1. $ grep -v bar /path/to/file

UNIX/Linux 管道与 grep 命令

grep 常常与管道一起使用,在这个例子中,显示硬盘设备的名字:


   
   
  1. # dmesg | egrep '(s|h)d[a-z]'

显示 CPU 型号:


   
   
  1. # cat /proc/cpuinfo | grep -i 'Model'

然而,以上命令也可以按照以下方法使用,不使用管道:


   
   
  1. # grep -i 'Model' /proc/cpuinfo

示例输出:


   
   
  1. model : 30
  2. model name : Intel(R) Core(TM) i7 CPU Q 820 @ 1.73GHz
  3. model : 30
  4. model name : Intel(R) Core(TM) i7 CPU Q 820 @ 1.73GHz

如何仅仅显示匹配到内容的文件名字?

使用 -l 选项去显示那些文件内容中包含 main() 的文件名:


   
   
  1. $ grep -l 'main' *.c

最后,你可以强制 grep 以彩色输出:


   
   
  1. $ grep --color vivek /etc/passwd

示例输出:

Grep command in action










本文来自云栖社区合作伙伴“Linux中国”
原文发布时间为:2013-04-02.
相关文章
|
30天前
|
Linux Shell
Linux 10 个“who”命令示例
Linux 10 个“who”命令示例
54 14
Linux 10 个“who”命令示例
|
9天前
|
Linux
linux查看目录下的文件夹命令,find查找某个目录,但是不包括这个目录本身?
通过本文的介绍,您应该对如何在 Linux 系统中查看目录下的文件夹以及使用 `find` 命令查找特定目录内容并排除该目录本身有了清晰的理解。掌握这些命令和技巧,可以大大提高日常文件管理和查找操作的效率。 在实际应用中,灵活使用这些命令和参数,可以帮助您快速定位和管理文件和目录,满足各种复杂的文件系统操作需求。
32 8
|
19天前
|
Ubuntu Linux
Linux 各发行版安装 ping 命令指南
如何在不同 Linux 发行版(Ubuntu/Debian、CentOS/RHEL/Fedora、Arch Linux、openSUSE、Alpine Linux)上安装 `ping` 命令,详细列出各发行版的安装步骤和验证方法,帮助系统管理员和网络工程师快速排查网络问题。
104 20
|
9天前
|
监控 Linux 数据处理
Linux grep技巧 结合awk查询
结合 `grep` 和 `awk`,可以实现灵活、高效的文本处理和数据分析。`grep` 用于快速过滤符合条件的行,`awk` 用于进一步处理和提取数据。这种组合使用在日志分析、数据处理和系统监控等场景中尤为常见。掌握这两者的基本用法和组合技巧,可以大大提升在 Linux 环境下的工作效率。
29 7
|
19天前
|
网络协议 Linux 应用服务中间件
kali的常用命令汇总Linux
kali的常用命令汇总linux
48 7
|
19天前
|
Unix Linux 编译器
UNIX/Linux 上的安装
UNIX/Linux 上的安装。
37 2
|
2月前
|
Linux 数据库
Linux中第一次使用locate命令报错?????
在Linux CentOS7系统中,使用`locate`命令时出现“command not found”错误,原因是缺少`mlocate`包。解决方法是通过`yum install mlocate -y`或`apt-get install mlocate`安装该包,并执行`updatedb`更新数据库以解决后续的“can not stat”错误。
37 9
|
2月前
|
监控 网络协议 Linux
Linux netstat 命令详解
Linux netstat 命令详解
|
8月前
|
Unix Shell Linux
在Unix/Linux操作系统中,Shell脚本广泛用于自动化任务
在Unix/Linux操作系统中,Shell脚本广泛用于自动化任务
75 2