介绍

grep是一个功能强大的文本搜索命令,可以用它来搜索某个文件中是否包含指定的搜索内容,它可以利用正则表达式来做复杂的筛选操作,它还可以为其它命令传输给管道的筛选,比如我们常用到的分析单个进程的操作就是会利用它“ps -ef|grep command”。

语法

grep [OPTION]... PATTERN [FILE]...

默认不加参数是显示匹配上的行记录,可以使用--help来查看它所支持的所以参数,本文只会列举比较常用的一些命令。

  1. -a:输出的内容不要忽略二进制数据
  2. -b<n>:输出匹配上的n个字节的行。
  3. -c :只显示符合条件的行的数量,不显示内容
  4. -d:当你要查找的是目录而不是文件的时候需要制定该参数,否则会报错
  5. -H:在输出的内容行前加上该行所属的文件名。
  6. -h:不在输出的行前加上该行所属的文件名,这是默认的选项。
  7. -i:忽略大小写
  8. -L:列出不符合查找内容的文件的文件名
  9. -l:列出符合查找内容的文件的文件名
  10. -m<n>:只输出匹配上的指定n行。
  11. -o:只显示查找的内容,不显示该行其它的内容。
  12. -q:什么都不输出
  13. -r:如果需要遍历整个目录的所有文件,可以使用该参数
  14. -v:显示没有匹配上的行信息,和默认值相反
  15. -V:显示版本信息

正则表达式

grep配合正则进行筛选的时候对于{ } ()都需要用到转义字符。

命令

说明

^

在字符的开启处进行匹配

$

在字符的末尾处进行匹配

.

匹配任何字符(包括回车和新行)

[….]

匹配括号内的任意单个字符

[m-n]

匹配m到n之间的任意单个字符,例如[0-9],[a-z],[A-Z]

[^..]

不能匹配括号内的任意单个字符

a*

匹配0个或多个a,包括空

a\{m\}

匹配m个a

a\{m,\}

匹配m个或者更多个a

a\{m,n\}

匹配m到n个a

\(….\)

将模式元素组成单一元素,例如(do)*意思是匹配0个多或多个do

grep常见用法

创建测试数据

  1. grep --help >/tmp/grep.text

1.为其它命令做筛选操作

  1. 查询包含sbin的进程

[root@localhost ~]# ps -ef |grep "sbin"
root 1 0 0 11:04 ? 00:00:01 /sbin/init
root 543 1 0 11:04 ? 00:00:00 /sbin/udevd -d
root 1559 1 0 11:04 ? 00:00:00 /usr/sbin/vmware-vmblock-fuse -o subtype=vmware-vmblock,default_permissions,allow_other /var/run/vmblock-fuse
root 1580 1 0 11:04 ? 00:00:18 /usr/sbin/vmtoolsd
root 1992 1 0 11:04 ? 00:00:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5
root 2078 1 0 11:04 ? 00:00:00 /usr/sbin/modem-manager
root 2122 1 0 11:04 ? 00:00:00 /usr/sbin/wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -B -u -f /var/log/wpa_supplicant.log -P /var/run/wpa_supplicant.pid
root 2133 1 0 11:05 ? 00:00:00 /usr/sbin/acpid
root 2219 1 0 11:05 ? 00:00:00 /usr/sbin/bluetoothd --udev
root 2298 1 0 11:05 ? 00:00:00 /usr/sbin/sshd
root 3172 1 0 11:05 ? 00:00:00 /usr/sbin/abrtd
root 3199 1 0 11:05 ? 00:00:00 /usr/sbin/atd
root 3215 1 0 11:05 ? 00:00:00 /usr/sbin/gdm-binary -nodaemon
root 3220 1 0 11:05 tty2 00:00:00 /sbin/mingetty /dev/tty2
root 3222 1 0 11:05 tty3 00:00:00 /sbin/mingetty /dev/tty3
root 3224 1 0 11:05 tty4 00:00:00 /sbin/mingetty /dev/tty4
root 3227 543 0 11:05 ? 00:00:00 /sbin/udevd -d
root 3228 1 0 11:05 tty5 00:00:00 /sbin/mingetty /dev/tty5
root 3230 1 0 11:05 tty6 00:00:00 /sbin/mingetty /dev/tty6
root 3231 543 0 11:05 ? 00:00:00 /sbin/udevd -d
root 3261 1 0 11:05 ? 00:00:00 /usr/sbin/console-kit-daemon --no-daemon
root 5923 2071 0 14:12 ? 00:00:00 /sbin/dhclient -d -4 -sf /usr/libexec/nm-dhcp-client.action -pf /var/run/dhclient-eth0.pid -lf /var/lib/dhclient/dhclient-3a7ff4d9-5a09-46b1-bb20-0298a18e6b78-eth0.lease -cf /var/run/nm-dhclient-eth0.conf eth0
root 6294 6044 0 15:50 pts/1 00:00:00 grep sbin

2. 查询行数

  1. 查询包含“-d”的行数
  2. [root@localhost ~]# grep -c "\-d" /tmp/grep.txt
  3. 6

3.$

查询以lines结尾的行

  1. [root@localhost ~]# grep "lines$" /tmp/grep.txt
  2. -x, --line-regexp force PATTERN to match only whole lines
  3. -v, --invert-match select non-matching lines
  4. -b, --byte-offset print the byte offset with output lines
  5. -n, --line-number print line number with output lines

4.{m,}

  1. 查询包含2个或者更多个S的行
  2. [root@localhost ~]# grep "\(s\)\{2,\}" /tmp/grep.txt
  3. PATTERN is, by default, a basic regular expression (BRE).
  4. -E, --extended-regexp PATTERN is an extended regular expression (ERE)
  5. -G, --basic-regexp PATTERN is a basic regular expression (BRE)
  6. -P, --perl-regexp PATTERN is a Perl regular expression
  7. -s, --no-messages suppress error messages
  8. -h, --no-filename suppress the file name prefix on output
  9. -q, --quiet, --silent suppress all normal output
  10. --binary-files=TYPE assume that binary files are TYPE;
  11. -r is given, - otherwise. If fewer than two FILEs are given, assume -h.

总结

注意使用转义字符,如果使用正则要查找的不是单个字符而是多个字符需要使用()把多个字符括起来,grep还有很多的使用技巧这里就不一一列出来。

备注:

作者:pursuer.chen

博客:http://www.cnblogs.com/chenmh

本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。

《欢迎交流讨论》

Linux grep命令和正则表达式的更多相关文章

  1. Linux grep 命令中的正则表达式详解

    在 Linux .类 Unix 系统中我该如何使用 Grep 命令的正则表达式呢? Linux 附带有 GNU grep 命令工具,它支持扩展正则表达式(extended regular expres ...

  2. linux grep命令

    linux grep命令1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressio ...

  3. linux grep命令详解

    linux grep命令详解 简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来 ...

  4. 如何使用Unix/Linux grep命令——磨刀不误砍柴工系列

     http://man.linuxde.net/grep ---------------------------------------------------- 如何使用Unix/Linux gre ...

  5. linux grep命令总结

    风生水起善战者,求之于势,不责于人,故能择人而任势. 博客园    首页    新随笔    联系    订阅    管理 posts - 791,  comments - 394,  trackba ...

  6. Linux grep命令详解[备份]

    linux grep命令 1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressi ...

  7. linux grep命令(linux在文件中搜索内容)

    转自:https://www.cnblogs.com/end/archive/2012/02/21/2360965.html linux grep命令 1.作用Linux系统中grep命令是一种强大的 ...

  8. 07 grep命令与正则表达式

    grep命令 首先我们知道grep命令是用来做文件内容过滤的!如果你要在文件中查找一些对应的内容,我们如何来过滤找到其中我们需要符合条件的内容呢?grep命令结合正则表达式就可以实现: grep.eg ...

  9. linux grep 命令

    Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...

随机推荐

  1. sprintf()函数,把数字转换成字符串

    char str_2[10];     int a=1234321;     sprintf(str_2,"%d",a);

  2. java学习教程

    java依然是目前比较流行的语言.虽然,本人是C#开发者,但是由于公司决定使用java开发,所以只好开始学习java.在学校时候只是接触过没有过深的学习过,而且参加工作后基本也一直在搞C#.好在,现在 ...

  3. 文件消息的简单样式demo

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. 自动生成Model层中对应表的各个字段

    select 'public '+ case t.name when 'varchar' then 'string' when 'smallint' then 'Int16' when 'int' t ...

  5. Linux Oracle删除归档日志

    今天遇到Oracle报这样的错:ORA-00257 查看了下,原来是Oracle的归档日志满了,解决方案两个 一:增加归档日志大小 二:删除无用的归档日志(我们选择这个方案) 什么也不说了Linux下 ...

  6. Android自定义View的实现方法,带你一步步深入了解View(四)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/17357967 不知不觉中,带你一步步深入了解View系列的文章已经写到第四篇了,回 ...

  7. Ubuntu下命令行方式对PDF文件进行缩放、合并、拆分

    安装软件: sudo aptitude install ghostscript 然后执行命令: gs -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -dCompatibili ...

  8. SpringMVC文件上传下载

    在Spring MVC的基础框架搭建起来后,我们测试了spring mvc中的返回值类型,如果你还没有搭建好springmvc的架构请参考博文->http://www.cnblogs.com/q ...

  9. 初学 Java Web 开发,请远离各种框架,从 Servlet 开发

    Web框架是开发者在使用某种语言编写Web应用服务端时关于架构的最佳实践.很多Web框架是从实际的Web项目抽取出来的,仅和Web的请求和响应处 理有关,形成一个基础,在开发别的应用项目的时候则可以从 ...

  10. H3C IRF mad检测

    这里 irf 两个交换机 S4 S5 S4 S4的MEmber id 为1 IRF member 1 renumber 1 S4的 irf 优先为10 irf member priority 10 链 ...