grep简析
作者&投稿:东尝 (若有异议请与网页底部的电邮联系)
Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。egrep是grep的扩展,支持更多的re元字符, fgrep就是fixed grep或fast grep,它们把所有的字母都看作单词,也就是说,正则表达式中的元字符表示回其自身的字面意义,不再特殊。linux使用GNU版本的grep。它功能更强,可以通过-G、-E、-F命令行选项来使用egrep和fgrep的功能。
grep的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。
使用实例:
.grep 搜索字符串
命令格式:
grep string filename
寻找字串的方法很多,比如说我想找所有以M开头的行.此时必须引进pattern的观
念.以下是一些简单的例子,以及说明:
1、查找指定进程
命令:ps -ef|grep java
2、查找指定进程个数
命令:ps -ef|grep -c java
或ps -ef|grep java -c
3、从文件中读取关键词进行搜索,默认是显示的是行
例:通过管道过滤ls -l输出的内容,只显示以a开头的行。
例:显示所有以d开头的文件中包含test的行。
$ grep \'test\' d*
例:输出以hat结尾的行内容
$ cat test.txt |grep hat$
例:显示在aa,bb,cc文件中匹配test的行。
$ grep \'test\' aa bb cc
例:显示所有包含每个字符串至少有5个连续小写字符的字符串的行。
在一组集合字节中,如果该字节组是连续的,例如大写英文/小写英文/数字等等,就可以使用[a-z],[A-Z],[0-9]等方式来书写,那么如果我们的要求字串是数字与英文呢?就将他全部写在一起,变成:[a-zA-Z0-9]。
例:显示包含ed或者at字符的内容行
cat test.txt |grep -E "ed|at"
例:如果west被匹配,则es就被存储到内存中,并标记为1,然后搜索任意个字符(. ),这些字符后面紧跟着另外一个es(1),找到就显示该行。如果用egrep或grep -E,就不用""号进行转义,直接写成'w(es)t. 1'就可以了。
$ grep \'w(es)t.*1\' aa
例:显示当前目录下面以.txt 结尾的文件中的所有包含每个字符串至少有7个连续小写字符的字符串的行
grep '[a-z]\{7\}' *.txt
例:查询IP地址、邮箱、手机号
这里用到了-o和-P命令
man grep查看
也就是说-o,只显示匹配行中匹配正则表达式的那部分,-P,作为Perl正则匹配
192.168.0.1
abc@163.com
匹配ABC类IP地址即 1.0.0.1---223.255.255.254
grep -oP "([0-9]{1,3}\.){3}[0-9]{1,3}" file.txt
grep -E --color "\<([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])\.([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])\>" file.txt
邮箱是任意长度数字字母@任意长度数字字母
命令(邮箱): grep -oP "[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z0-9_-]+)+" file.txt
手机号码是1[3|4|5|8]后面接9位数字的
命令(手机号): grep -E "\<1[3|4|5|8][0-9]{9}\>" file.txt
例:任意一个字节 . 与重复字节 *
. (小数点):代表『一定有一个任意字节』的意思;
例:限定连续 RE 字符范围 {}
利用 . 与 RE 字符及 * 来配置 0 个到无限多个重复字节
打算找出两个到五个 o 的连续字串,该如何作?这时候就得要使用到限定范围的字符 {} 了。 但因为 { 与 } 的符号在 shell 是有特殊意义的,因此, 我们必须要使用字符 \ 来让他失去特殊意义才行。
阎饺天保: 任意一个字节 . 与重复字节 * 这两个符号在正则表达式的意义如下: . (小数点):代表『一定有一个任意字节』的意思; * (星号):代表『重复前一个字符, 0 到无穷多次』的意思,为组合形态假设我需要找出 g??d 的字串,亦即共有四个...
荔湾区18791221054: linux grep是什么? - ?
阎饺天保: Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户.
荔湾区18791221054: grep的用法 - ?
阎饺天保: grep是linux下用于搜索输出内容中所含内容的一个命令.1.例如我要搜索名为aaa.txt中的一串字符"bbb",可以用 cat aaa.txt|grep bbb2.我要搜索当前目录含有bb的文件,可以用 ls |grep bb
荔湾区18791221054: netstat - nl| grep 3333 中的grep什么意思?它取自什么单词阿? - ?
阎饺天保: grep 是一种文本搜索工具,可以从档案中搜索匹配的字符串,为 global / regular expression / print 的首字母缩写,功能和windows下的find命令类似,但因为可以使用正则表达式,所以功能比find强大的多.netstat -nl 意为 查看所有后台程序监听的端口 netstat -nl | grep 3333 整句可以查看哪些程序正在监听3333端口
荔湾区18791221054: linux的grep查询命令 - ?
阎饺天保: grep默认只能识别基本的正则表达式,如果需要高级的,需要这样:grep -E 'A.*B|B.*A' filename 可以找到符合要求的,或者使用awk:awk '/A/&&/B/' filename
荔湾区18791221054: linuxgrep和find的区别? - ?
阎饺天保: 这是两个不同的命令,关于grep:Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户....
荔湾区18791221054: 正则表达式相关:grep和正则表达式有什么关系或联系?或者说grep是什么?常看到… - ?
阎饺天保: grep 是个工具,或者说是个命令,Linux/Unix 的标准组件.展开全部 grep 可以用来查找或提取文本,查找的格式可以是普通的字符串,也可以是正则表达式.正则表达式可以实现很复杂的字符串查找.其实 perl 才是使用正则表达式的代表性语言,perl 需要写代码,而 grep 不用写代码.
荔湾区18791221054: linux中的grep怎么用~? - ?
阎饺天保: grep abc /Desktop/AA 功能就是在桌面AA文档中查找abc的文本 如果有则将包含有AA的行全部显示 AA这一文档必须为文本类型的,下面是参照, grep指令用于查找内容包含指定的范本样式的文件,如果发现某文件的内容符合所指定的范本样...
荔湾区18791221054: grep命令和tail命令的区别 - ?
阎饺天保: grep 是抓取 的意思.它一行一行地 扫描输入文件, 如果某行出现了要抓取的字符串,则输出该行,有多少出现该字符串的行,就输出这些行,没出现的行不输出.tail 是尾巴的意思, 输出文件的尾巴,即输出文件的倒数 几行,行数是你给定的参数.
荔湾区18791221054: linux系统grep命令有什么用 - ?
阎饺天保: 这个命令全程global regular print是通过正则表达式打印出匹配的字符串或者文件行.