grep简析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grep简析相关的知识,希望对你有一定的参考价值。

参考技术A grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

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 是有特殊意义的,因此, 我们必须要使用字符 \ 来让他失去特殊意义才行。

Android 之LocalBroadcastManager原理简析

LocalBroadcastManager原理简析

1、BroadcastReceiver的缺点

Android的广播应用的很广泛,其根本原理就是观察者模式的应用,在Android开发应用中观察者模式的应用是很广泛的,比如EventBus组件,RecycleViewListView等都是利用了观察者模式。但是相较于BroadcastReceiver来说,有如下缺点:
1、

以上是关于grep简析的主要内容,如果未能解决你的问题,请参考以下文章

小猿圈之Linux使用grep筛选多个条件及grep常用过滤命令

使用grep命令怎么过滤多个条件

什么是grep -v grep??

【笔记】grep 命令 - 查找文件内容

linux grep查询结果再过滤

grep多个条件怎么做