Linux grep命令和正则表达式
介绍
grep是一个功能强大的文本搜索命令,可以用它来搜索某个文件中是否包含指定的搜索内容,它可以利用正则表达式来做复杂的筛选操作,它还可以为其它命令传输给管道的筛选,比如我们常用到的分析单个进程的操作就是会利用它“ps -ef|grep command”。
语法
grep [OPTION]... PATTERN [FILE]...
默认不加参数是显示匹配上的行记录,可以使用--help来查看它所支持的所以参数,本文只会列举比较常用的一些命令。
-a:输出的内容不要忽略二进制数据
-b<n>:输出匹配上的n个字节的行。
-c :只显示符合条件的行的数量,不显示内容
-d:当你要查找的是目录而不是文件的时候需要制定该参数,否则会报错
-H:在输出的内容行前加上该行所属的文件名。
-h:不在输出的行前加上该行所属的文件名,这是默认的选项。
-i:忽略大小写
-L:列出不符合查找内容的文件的文件名
-l:列出符合查找内容的文件的文件名
-m<n>:只输出匹配上的指定n行。
-o:只显示查找的内容,不显示该行其它的内容。
-q:什么都不输出
-r:如果需要遍历整个目录的所有文件,可以使用该参数
-v:显示没有匹配上的行信息,和默认值相反
-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常见用法
创建测试数据
grep --help >/tmp/grep.text
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. 查询行数
查询包含“-d”的行数
[root@localhost ~]# grep -c "\-d" /tmp/grep.txt
6
3.$
查询以lines结尾的行
[root@localhost ~]# grep "lines$" /tmp/grep.txt
-x, --line-regexp force PATTERN to match only whole lines
-v, --invert-match select non-matching lines
-b, --byte-offset print the byte offset with output lines
-n, --line-number print line number with output lines
4.{m,}
查询包含2个或者更多个S的行
[root@localhost ~]# grep "\(s\)\{2,\}" /tmp/grep.txt
PATTERN is, by default, a basic regular expression (BRE).
-E, --extended-regexp PATTERN is an extended regular expression (ERE)
-G, --basic-regexp PATTERN is a basic regular expression (BRE)
-P, --perl-regexp PATTERN is a Perl regular expression
-s, --no-messages suppress error messages
-h, --no-filename suppress the file name prefix on output
-q, --quiet, --silent suppress all normal output
--binary-files=TYPE assume that binary files are TYPE;
-r is given, - otherwise. If fewer than two FILEs are given, assume -h.
总结
注意使用转义字符,如果使用正则要查找的不是单个字符而是多个字符需要使用()把多个字符括起来,grep还有很多的使用技巧这里就不一一列出来。
|
备注: 作者:pursuer.chen 博客:http://www.cnblogs.com/chenmh 本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接。 《欢迎交流讨论》 |
Linux grep命令和正则表达式的更多相关文章
- Linux grep 命令中的正则表达式详解
在 Linux .类 Unix 系统中我该如何使用 Grep 命令的正则表达式呢? Linux 附带有 GNU grep 命令工具,它支持扩展正则表达式(extended regular expres ...
- linux grep命令
linux grep命令1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressio ...
- linux grep命令详解
linux grep命令详解 简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来 ...
- 如何使用Unix/Linux grep命令——磨刀不误砍柴工系列
http://man.linuxde.net/grep ---------------------------------------------------- 如何使用Unix/Linux gre ...
- linux grep命令总结
风生水起善战者,求之于势,不责于人,故能择人而任势. 博客园 首页 新随笔 联系 订阅 管理 posts - 791, comments - 394, trackba ...
- Linux grep命令详解[备份]
linux grep命令 1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressi ...
- linux grep命令(linux在文件中搜索内容)
转自:https://www.cnblogs.com/end/archive/2012/02/21/2360965.html linux grep命令 1.作用Linux系统中grep命令是一种强大的 ...
- 07 grep命令与正则表达式
grep命令 首先我们知道grep命令是用来做文件内容过滤的!如果你要在文件中查找一些对应的内容,我们如何来过滤找到其中我们需要符合条件的内容呢?grep命令结合正则表达式就可以实现: grep.eg ...
- linux grep 命令
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...
随机推荐
- php [] array的区别
<?php/** * Created by IntelliJ IDEA. * User: Administrator * Date: 2017/1/2 * Time: 17:40 定义数组 ar ...
- IOS 代码提示有问题
Window(menu) -> Organizer(menu) -> Projects(tab) 删除 Derived Data ,立刻关闭xcode 然后重启xcode然后重新打开项目.
- Freemarket学习整理。
导入freemarker.jar包 把word文档另存为xml格式,2007以上版本支持. 编写代码,把路径更改为xml所在路径. 把需要更改的地方写成${}形式. package Document. ...
- ATL 获取flash信息
// This goes past the ATL includes #import "C:/WINDOWS/system32/Macromed/Flash/Flash9e.ocx" ...
- cocos2dx的build_win32.dat出现问题以及install-template-msvc.dat出现.js没有脚本引擎
关于cocos2dx-2.x.x版本当中出现build_win32.bat执行失败 (针对VS2013)应当在VS的安装路径查找msbuild的文件夹,再其中查找msbuild.exe文件找到四个东西 ...
- Extjs 表单验证后,几种错误信息展示方式
今天要求对form表单验证,进行系统学习一下,故做了几个示例: Ext.onReady(function(){ var panel=Ext.create('Ext.form.Panel' ...
- C#装箱和拆箱
1.装箱是将值类型转换为引用类型(或者转换为此值类型所实现的任何接口类型)的隐式转换,当 CLR 对值类型进行装箱时,会将该值包装到 System.Object 内部,再将后者存储在托管堆上. ; / ...
- java执行效率低,但效率就低吗?
很多没用过java或者没怎么用过java的程序员都会说java执行效率低,这种言论时不时的在影响着我这个初级的java开发者. java执行效率低因如下几点导致(和C++比较): 1,java不允许内 ...
- NPOI创建DOCX常用操作【转】
1. 创建文档 XWPFDocument m_Docx = new XWPFDocument();2. 页面设置 //1‘=1440twip=25.4mm=72pt(磅point)=96px(像素 ...
- spark单机环境下运行一些解决问题
ERROR1.hadoop依赖 [ERROR] - Failed to locate the winutils binary in the hadoop binary path java.io.I ...