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 明确要求搜索子 ...
随机推荐
- PowerDesigner最基础的使用方法入门学习(转载)
来源:http://www.cnblogs.com/biehongli/p/6025954.html 1:入门级使用PowerDesigner软件创建数据库(直接上图怎么创建,其他的概念知识可自行学习 ...
- git push远程仓库时报错:fatal: remote origin already exists. (已解决)
在做远程仓库调试阶段,突然发现修改后的项目无法push了: 如果输入$ git remote add origin git@github.com:djqiang(github帐号名)/gitdemo( ...
- Matlab给三维点云添加高斯噪声和随机噪声
写在前面 在我们进行点云配准一类的模拟实验时,第一步就是对原始点云进行适当的RT变换,并添加一定的噪声,得到测量点云,然后才可以用我们的算法去进行后面的配准操作.在添加噪声这一块,matlab里并没有 ...
- spring-boot-starter-actuator不起作用
spring-boot-starter-actuator的作用,actuator是监控系统健康情况的工具.使用这个功能首先要先添加依赖,如下.<!-- 监控和管理生产环境--><de ...
- 利用css3制作毛玻璃的效果
忙里偷闲,最近又在看许多比较酷炫的效果.现在基于jquery的插件比较多,但是很多插件的兼容性不是太好,所以原生的才是王道.在日常当中,毛玻璃已经不常见了,那是一个很久远年代的东西了.诺,下面就是毛玻 ...
- PHP中的prepare准备语句的意义
mysqli和PDO扩展都有prepare这个语法,刚开始以为只是单纯的语法,没想到,还是有实际意义的: “每次发送查询语句给MySQL服务时,都必须解析该查询的语法,确保结构正确并能够执行.这是这个 ...
- 移动端实现上拉加载更多(使用dropload.js vs js)
做下笔记,:移动端实现上拉加载更多,其实是数据的分段加载,在这里为了做测试我写了几个json文件作为分段数据: 方式一:使用dropload.js; 配置好相关参数及回调函数就可使用:代码如下 var ...
- 【个人经历】记自己的第一次GitHub开源代码共享经历
题记: 自己做程序员快三年有余了,感觉自己和刚入职相比确实有了不少进步,当然三年要是不进步那不就傻了吗,有时候我也在想,我在这三年里留下了什么,当然也不是说有多么高尚的想法,就是以后对别人介绍自己的时 ...
- leetCode题解之First Missing Positive
1.问题描述 2.题解思路 本题的思路是对于数组中每个正的元素,应该将其放到数组中对应的位置,比如元素1 ,应该放在数组的第一个位置.以此类推,最后检查数组中元素值和下标不匹配的情况. 3.代码 in ...
- [转载]敏感词过滤,PHP实现的Trie树
原文地址:http://blog.11034.org/2012-07/trie_in_php.html 项目需求,要做敏感词过滤,对于敏感词本身就是一个CRUD的模块很简单,比较麻烦的就是对各种输入的 ...