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

来源:互联网 发布:淘宝买家怎么导出订单 编辑:程序博客网 时间:2024/05/19 13:28

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

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

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



你知道吗

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

g/re/p

grep 命令的语法

语法如下所示:

grep 'word' 文件名grep 'word' 文件1 文件2 文件3grep '字符串1 字符串2'  文件名cat 某个文件 | grep '某个东西'command | grep '某个东西'command 选项1 | grep '数据'grep --color '数据' 文件名

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

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

$ grep boo /etc/passwd

输出内容:

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

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

$ grep -i "boo" /etc/passwd

递归使用 grep

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

$ grep -r "192.168.1.5" /etc/

或者是:

$ grep -R "192.168.1.5" /etc/

示例输出:

/etc/ppp/options:# ms-wins 192.168.1.50/etc/ppp/options:# ms-wins 192.168.1.51/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 选项来禁止输出:

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

或者

$ grep -hR "192.168.1.5" /etc/

示例输出:

# ms-wins 192.168.1.50# ms-wins 192.168.1.51addresses1=192.168.1.5;24;192.168.1.2;

使用 grep 去搜索文本

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

$ grep -w "boo" file

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

使用 egrep 命令如下:

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

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

统计文本匹配到的行数

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

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

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

$ grep -n 'root' /etc/passwd

示例输出:

1:root:x:0:0:root:/root:/bin/bash1042:rootdoor:x:0:0:rootdoor:/home/rootdoor:/bin/csh3319:initrootapp:x:0:0:initrootapp:/home/initroot:/bin/ksh

反转匹配(不匹配)

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

$ grep -v bar /path/to/file

UNIX/Linux 管道与 grep 命令

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

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

显示 CPU 型号:

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

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

# grep -i 'Model' /proc/cpuinfo

示例输出:

model       : 30model name  : Intel(R) Core(TM) i7 CPU       Q 820  @ 1.73GHzmodel       : 30model name  : Intel(R) Core(TM) i7 CPU       Q 820  @ 1.73GHz

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

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

$ grep -l 'main' *.c

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

$ grep --color vivek /etc/passwd

示例输出:



作者:Vivek Gite 

延伸阅读

《Linux常用命令》系列技术文章整理收藏 

1Linux 系统下查看硬件信息命令大全

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

3linux下用shell、sed批量替换多个文件中的字符串

4linux中scp命令和scp命令用法大全

5Linux 经常使用的命令

6新手应知应会的Linux命令

7积累linux常用的命令

8详解Linux系统中md5sum命令的用法

9Linux中,创建聊天服务器、移除冗余软件包的实用命令

10Linux中7个用来浏览网页和下载文件的命令

11在Linux系统中使用tar命令压缩和解压文件的教程

1212个linux进程管理命令介绍

13Linux Ctrl+Z的使用方法

145个经典有趣的 Linux 命令行技巧

15Centos下查看网卡的实时流量命令

16linux、unix下快速清空文件的方法

1711个让你吃惊的 Linux 终端命令

1814 个 Linux grep 命令的例子

19Linux 中 sort 命令的14个有用的范例(一)

20Apache、PHP 隐藏版本信息

21解决ssh登录后闲置时间过长而断开连接

22centos 用户相关的命令

23grep如何忽略过滤.svn目录以及如何忽略多个目录

24centos 用户相关的命令

25解决ssh登录后闲置时间过长而断开连接

26Shell脚本统计文件行数的8种方法

27Linux xargs命令

28Linux文本搜索工具grep使用详解

29linux系统用什么命令查看端口的占用情况?

30Linux如何提高大文件的拷贝效率以节约时间

31Linux查看系统日志的一些常用命令总结

32Ubuntu文本编辑器vi使用方向键出错的解决方法

334个最流行的Linux平台开源代码编辑器

3420条Linux命令面试问答

35在 Linux 下你所不知道的 df 命令的那些功能

36Linux ps 命令实战

37Linux系统中下载文件的wget命令操作实例

38Linux正则表达式使用指南

39CentOS 6.5系统设置固定IP的方法

40Linux如何使用awk文本处理工具进行数组排序

41Linux tar命令Tar Time Stamp in the Future问题解决方法

42CentOS如何将DVD设置为默认yum源以便DVD中软件的下载安装

43Linux下查看内存使用情况的方法总结

44Linux如何使用locate命令查找数据查找指定文件

45Linux find命令中-path -prune参数作用详细介绍

46Linux curl使用简单介绍

8 0
原创粉丝点击