grep命令.md
grep命令
简介
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
作用
文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查;打印匹配到的行;
模式
由正则表达式的元字符及文本字符所编写出的过滤条件;
格式
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
选项
- -a --text #不要忽略二进制的数据。
- -A<显示行数> --after-context=<显示行数> #除了显示符合范本样式的那一列之外,并显示该行之后的内容。
- -b --byte-offset #在显示符合样式的那一行之前,标示出该行第一个字符的编号。
- -B<显示行数> --before-context=<显示行数> #除了显示符合样式的那一行之外,并显示该行之前的内容。
- -c --count #计算符合样式的列数。
- -C<显示行数> --context=<显示行数>或-<显示行数> #除了显示符合样式的那一行之外,并显示该行之前后的内容。
- -d <动作> --directories=<动作> #当指定要查找的是目录而非文件时,必须使用这项参数,否则grep指令将回报信息并停止动作。
- -e<范本样式> --regexp=<范本样式> #指定字符串做为查找文件内容的样式。
- -E --extended-regexp #将样式为延伸的普通表示法来使用。
- -f<规则文件> --file=<规则文件> #指定规则文件,其内容含有一个或多个规则样式,让grep查找符合规则条件的文件内容,格式为每行一个规则样式。
- -F --fixed-regexp #将样式视为固定字符串的列表。
- -G --basic-regexp #将样式视为普通的表示法来使用。
- -h --no-filename #在显示符合样式的那一行之前,不标示该行所属的文件名称。
- -H --with-filename #在显示符合样式的那一行之前,表示该行所属的文件名称。
- -i --ignore-case #忽略字符大小写的差别。
- -l --file-with-matches #列出文件内容符合指定的样式的文件名称。
- -L --files-without-match #列出文件内容不符合指定的样式的文件名称。
- -n --line-number #在显示符合样式的那一行之前,标示出该行的列数编号。
- -q --quiet或--silent #不显示任何信息。
- -r --recursive #此参数的效果和指定“-d recurse”参数相同。
- -s --no-messages #不显示错误信息。
- -v --revert-match #显示不包含匹配文本的所有行。
- -V --version #显示版本信息。
- -w --word-regexp #只显示全字符合的列。
- -x --line-regexp #只显示全列符合的列。
- -y #此参数的效果和指定“-i”参数相同。
- --color=auto:对匹配到的文本着色后高亮显示;
基本正则表达式
字符匹配
- . :匹配任意单个字符;
- []:匹配指定范围内的任意单个字符;
- [^]:匹配指定范围外的任意单个字符;
匹配次数
用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作于贪婪模式;
- *:匹配其前面的字符任意次;0,1,多次;
- .*:匹配任意长度的任意字符
- \?:匹配其前面的字符0次或1次;即其前面的字符是可有可无的;
- \+:匹配其前面的字符1次或多次;即其面的字符要出现至少1次;
- \{m\}:匹配其前面的字符m次;
- \{m,n\}:匹配其前面的字符至少m次,至多n次;
- \{0,n\}:至多n次
- \{m,\}:至少m次
位置锚定
- ^:行首锚定;用于模式的最左侧;
- $:行尾锚定;用于模式的最右侧;
- ^PATTERN$:用于PATTERN来匹配整行;
- ^$:空白行;
- ^[[:space:]]*$:空行或包含空白字符的行;
- \< 或 \b:词首锚定,用于单词模式的左侧;
- \> 或 \b:词尾锚定,用于单词模式的右侧;
- \<PATTERN\>:匹配完整单词;
单词:非特殊字符组成的连续字符(字符串)都称为单词;
分组及引用
- \(\):将一个或多个字符捆绑在一起,当作一个整体进行处理;
Note:分组括号中的模式匹配 到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:
\1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
\2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
POSIX字符
为了在不同国家的字符编码中保持一至,POSIX(The Portable Operating System Interface)增加了特殊的字符类,如[:alnum:]是[A-Za-z0-9]的另一个写法。要把它们放到[]号内才能成为正则表达式,如[A- Za-z0-9]或[[:alnum:]]。在linux下的grep除fgrep外,都支持POSIX的字符类。
- [:alnum:] #文字数字字符
- [:alpha:] #文字字符
- [:digit:] #数字字符
- [:graph:] #非空字符(非空格、控制字符)
- [:lower:] #小写字符
- [:cntrl:] #控制字符
- [:print:] #非空字符(包括空格)
- [:punct:] #标点符号
- [:space:] #所有空白字符(新行,空格,制表符)
- [:upper:] #大写字符
- [:xdigit:] #十六进制数字(0-9,a-f,A-F)
egrep命令
egrep命令是支持扩展的正则表达式实现类似于grep文本过滤功能;grep -E就相当于egrep,这里不区分两个命令只是需要将扩展正则表达式说明下。
扩展正则表达式的元字符
字符匹配
- .:任意单个字符
- []:指定范围内的任意单个字符
- [^]:指定范围外的任意单个字符
次数匹配
- *:任意次,0,1或多次;
- ?:0次或1次,其前的字符是可有可无的;
- +:其前字符至少1次;
- {m}:其前的字符m次;
- {m,n}:至少m次,至多n次;
- {0,n}
- {m,}
位置锚定
- ^:行首锚定;
- $:行尾锚定;
- \<, \b:词首锚定;
- \>, \b:词尾锚定;
分组及引用
- ():分组;括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中;
或
- a|b:a或者b;
- C|cat:C或cat
- (c|C)at:cat或Cat
使用举例
显示/etc/passwd文件中不以/bin/bash结尾的行:
# grep -v "/bin/bash$" /etc/passwd
找出/etc/passwd文件中的两位数或三位数
# egrep "[0-9]\{2,3\}" /etc/passwd
找出/etc/rc.d/rc.sysinit和/etc/grub2.cfg文件中,以至少一个空白字符开头,且后面非空白字符的行
# egrep "^[[:space:]]+[^[:space:]]" /etc/grub2.cfg /etc/rc.d/init.d/functions
找出"netstat -tan"命令的结果中以'LISTEN'后跟0、1或多个空白字符结尾的行
# netstat -tan | grep "LISTEN[[:space:]]*$"
找出/proc/meminfo文件中,所有以大写或小写S开头的行;至少有三种实现方式;
# egrep "^[sS]" /proc/meminfo
# egrep "^(s|S)" /proc/meminfo
# grep -i "^s" /proc/meminfo
显示当前系统上root、centos或fedora用户的相关信息;
# egrep "^(root|centos|fedora)\>" /etc/passwd
找出/etc/rc.d/init.d/functions文件中某单词后面跟一个小括号的行;
# egrep -o "\<.*\>\(\)" /etc/rc.d/init.d/functions
# grep -E -o "[_[:alnum:]]+\(\)" /etc/rc.d/init.d/functions
使用echo命令输出一绝对路径,使用egrep取出基名;
# echo /etc/sysconfig/ | grep -E -o "[^/]+/?$"
找出ifconfig命令结果中的1-255之间的数值
# ifconfig |egrep "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"
找出ifconfig命令结果中的IP地址
# ifconfig |egrep -o "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"
# ifconfig |head -2 |tail -1|cut -d' ' -f 10
# ifconfig |head -2 |tail -1|awk '{print $2}'
# hostname -I |cut -d' ' -f1
找出/etc/passwd文件中用户名同shell名的行
# egrep "^([^:]+\>).*\1$" /etc/passwd
grep命令.md的更多相关文章
- linux grep命令
linux grep命令1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressio ...
- grep 命令
简单介绍:grep命令是用于分析一行信息,若当中有我们所需要的信息,就将该行取出来. 语法结构:grep [-acinv] [--color=auto] '查找关键字' #{filename} -a: ...
- linux管道命令grep命令参数及用法详解---附使用案例|grep
功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...
- grep 命令详解
[root@www ~]# grep [-acinv] [--color=auto] '搜寻字符串' filename 选项与参数: -a :将 binary 文件以 text 文件的方式搜寻数据 - ...
- grep 命令操作
linux grep命令 1.作用Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expressi ...
- Linux命令(23)grep命令的使用
grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正 ...
- 每天一个linux命令(39):grep 命令
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...
- grep命令的使用
grep是UNIX和LINUX中使用最广泛的命令之一.grep允许对文本文件进行模式查找.如果找到匹配模式, grep打印包含模式的所有行.grep支持基本正则表达式,也支持其扩展集.grep有三种变 ...
- 由一条Linux的grep命令说起
今天在开发的时候,看到同事使用了这样的一条linux命令 grep 'class YourClass' -rwi * |grep -v svn 想到了 grep命令的,几个参数. -r 明确要求搜索子 ...
随机推荐
- 使用phpQuery轻松采集网页内容
phpQuery是一个基于PHP的服务端开源项目,它可以让PHP开发人员轻松处理DOM文档内容,比如获取某新闻网站的头条信息.更有意思的是,它采用了jQuery的思想,你可以像使用jQuery一样处理 ...
- Android开发之旅1:环境搭建及HelloWorld
——工欲善其事必先利其器 引言 本系列适合0基础的人员,因为我就是从0开始的,此系列记录我步入Android开发的一些经验分享,望与君共勉!作为Android队伍中的一个新人的我,如果有什么不对的地方 ...
- webpack开发工具
source map 用来调试打包后的代码 const path = require('path'); const HtmlWebpackPlugin = require('html-webpack- ...
- ASP.NET MVC 简单事务添加
ASP.NET MVC 简单事务 //实例化查询上下文 using ( BookStoreEntities db = new BookStoreEntities()) { //找到需要价格和名称的数据 ...
- AGC006C Rabbit Exercise
传送门 设 \(f_{i,j}\) 表示兔子 \(i\) 在当前 \(j\) 轮的期望位置 对于一次操作 \(f_{i,j+1}=\frac{1}{2}(2f_{i-1,j}-f_{i,j})+\fr ...
- jQuery筛选结果等于true的筛选
一般来说,使用jQuery筛选器的筛选结果都是数组,可以用length>0来判断是否筛选到:但是有一些筛选结果是布尔值,需要注意: 1.hasClass 2.is
- 如何解决css-子div设置margin-top后,父div与子div一起下移的bug?
根据规范,一个盒子如果没有上补白(padding-top)和上边框(border-top),那么这个盒子的上边距会和其内部文档流中的第一个子元素的上边距重叠. 这是规范引起的普遍问题. 只要给父盒子设 ...
- 让浏览器识别HTML5规范中的新标签
IE8浏览器中还没有添加对HTML5新标签的支持,所以在IE8中无法直接展现HTML5新标签中的内容.庆幸的是IE8/IE7/IE6支持通过document.createElement方法产生的标签, ...
- Difference between 'SAME' and 'VALID' padding
Difference between 'SAME' and 'VALID' padding 'SAME' padding 和 'VALID' padding 的区别 If you like ascii ...
- asp.net mvc +easyui 实现权限管理(二)
一写完后,好久没有继续写了.最近公司又在重新开发权限系统了,但是由于我人微言轻,无法阻止他们设计一个太监版的权限系统.想想确实是官大一级压死人啊, 没办法我只好不参与了 让他们去折腾. 我就大概说一下 ...