linux三剑客之一grep
正则表达式(Regular Expression)
目录
起源
正则表达式是什么?
两类基本正则表达式
正则表达式元字符
Linux上文本三剑客
小试牛刀
总结
一、起源
正则表达式这个名词,相信很多人都听说过,这个名词最早起源于1956 年, 一位叫 Stephen Kleene 的美国数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为“神经网事件的表示法”的论文,引入了正则表达式的概念。正则表达式就是用来描述他称为“正则集的代数”的表达式,因此采用“正则表达式”这个术语。
随后,发现可以将这一工作应用于使用Ken Thompson 的计算搜索算法的一些早期研究,Ken Thompson是Unix 的主要发明人。正则表达式的第一个实用应用程序就是 Unix 中的qed 编辑器。
之后一段时间,人们发现可以将这一工作成果应用于其他方面,正则的应用越来越广泛,功能也非常的强大。
二、正则表达式是什么?
正则表达式,又称规则表达式。(英语:RegularExpression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。——百度百科
这句话可能术语太多不太好理解,比如我们都知道淘金,通过不同筛子经过多次过滤环节才能筛到最终的金子,这里的正则就是如此,通过不同筛选最重得到我们最终期待的。
到了这里我们会很好奇既然它可以找到我们想要的条件自动返回结果,那么我们又怎么使用它呢?后面在文本编辑器着重介绍。
三、两类基本正则表达式
1、基本正则表达式:BRE
grep,egrep -G
2、扩展正则表达式:ERE
grep -E, egrep
四、正则表达式元字符
字符匹配
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 字母和数字
[:alpha:] 代表任何英文大小写字符,亦即A-Z, a-z
[:lower:] 小写字母[:upper:] 大写字母
[:blank:] 空白字符(空格和制表符)
[:space:]水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃...)
[:digit:] 十进制数字
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号
匹配次数
用在指定次数的字符后面,用于指定前面的字符要出现的次数#*
* 匹配前面的字符任意次,包括0次
贪婪模式:尽可能长的匹配
.*任意长度的任意字符
\?匹配其前面的字符0或1次
\+匹配其前面的字符至少1次
\{n\}匹配前面的字符n次
\{m,n\}匹配前面的字符至少m次,之多n次
\{,n}匹配前面的字符至多n次
\{n,\}匹配前面的字符至少n次
位置锚定
定位出现的位置
^行首锚定,用于模式的最左侧
$行尾锚定,用于模式的最右侧
^PATTERN$ 用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b 词首锚定,用于单词模式的左侧
\> 或 \b 词尾锚定,用于单词模式的右侧
-》注意:在grep中,字母和数字的组合也被视为单词
\<PATTERN> 匹配整个单词
分组
1、分组:\(\)将一个或多个字符绑定在一起,当作一个整体进行处理,如:\(root\)\+
2、分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为:\1,\2,\3............
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符
\2:模式从左侧起,第二个左括号以及与其匹配的右括号之间的内容
3、后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身
或者:\|
五、 Linux上文本三剑客
grep:文本过滤(模式:pattern)工具
sed:stream editor,文本编辑器
awk:Linux上实际是gawk(GUN awk),文本报告生成器
这里有句心里话,这里文本编辑命令非常的多,面对这样的现实就必须得对常用的命令牢记,总结一句话搬砖活累一点,回报一定是有的!!!
grep
作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查,打印匹配到的行。
功能:它最重要的功能就是进行字符串数据的对比,然后将符合用户需求的字符打印出来。
过程:grep在数据中查找一个字符串时,是以整行为单位来进行数据的选取的。
模式:由正则表达式字符及文本字符所编写的过滤条件。
grep [OPTIONS] PATTERN [FILE...]
无符号和有符号的执行区别
grep root /etc/passwd
grep "$USER" /etc/passwd
grep '$USER' /etc/passwd
grep `whoami` /etc/passwd
注意这里不是单引号'还是强引用`,注意符号
grep命令选项:
--color=auto 关键字高亮显示
-v 反向搜索
-i 忽略大小写
-n 显示行号
-c 不显示搜索结果,仅显示匹配的行数
-o 仅显示匹配到的字符串
-q 静默输出
-A 显示搜索行及其向下相临的#行
-B 显示搜索行及其向上相临的#行
-C 显示搜索行及其向上和向下相临的#行
-e char1 -e char2 [-e charN] 多个选项间or关系
-w 匹配整个单词
-E 或egrep 支持扩展正则表达式
-F 或fgrep 不支持正则表达式
扩展正则表达式 egrep
俩种操作方式
grep -E
egrep
为了简化命令操作,了解一些使用范围更广的扩展表达式,格式会更加整洁,思路会更加清晰
语法 egrep [options] PATTERN [FILE...]
扩展正则表达式的元字符
字符匹配:
. 任意单个字符
[]指定范围字符
[^]不在指定范围的字符
次数匹配:
*: 匹配前面字符任意次
?: 0或1次
+:1次或多次
{m}: 匹配m次
{m,n}:至少m次,至多n次
位置锚定:
^:行首
$:行尾
\<,\b:语首
\>,\b:语尾
分组:
()
后向引用: \1,\2,......
或者:
|
六、小试牛刀(ؔᶿ̷⌔ؔᶿ̷)
======Stay hungry, Stay foolish======
grep --color=auto
grep --color=auto 让关键字高亮显示
默认的alias里面对grep 做了默认设置
查看一下 which grep
这里的alias是否还有印象呢?
这个选项就能使条件高亮显示
补充知识:去别名的三种方式
/bin/grep
'grep'
\grep
grep -q 静默模式
这里的意思是让匹配出来不显示
举例:判断在/etc/group文件里如果有shuguo就
使用存在否则不存在
场景
grep -q shuguo /etc/group && echo exist || echo not exist
初认识这个命令可能不太了解它的作用,下面总结一下:根据不同的输出结果做出差异选择
,得到想要的结果
grep -[ABC] 显示搜索行及其向下相邻的#行
实际中的场景
nmap探测目标主机跑了哪些服务包括开了哪些端口
探测开机主机的ip
nmap -v -sP 172.18.250.0/24 |grep -B1 "Host is up"| grep for | cut -d" " -f5
grep -e [keyword] -e [keyword] filename
实现多个选项间的逻辑or关系
grep root /etc/passwd | grep bin
此命令的执行顺序是从左至右依次选择,此关系为并的关系,接上一步在进行筛选
grep -e root -e bin /etc/passwd
此命令是或的关系,上面的命令对此筛选没影响
grep -w 匹配整个单词(完全匹配)
举例
grep root /etc/passwd
grep -w root /etc/passwd
场景
netstat -tulnap > net.txt
对端口修改为80,8080
筛选条件端口80会出现二个结果此时完整匹配就能得到想要的结果
扩展正则
相比于正则区别在于有些命令减少了\
使用
grep -E "root|bin" /etc/passwd
egrep " root|bin" /etc/passwd
匹配次数
这里主要注意在对匹配次数,做上限限制会出现多次也能满足情况这里主要是匹配时做了分割,时匹配时满足了条件。
分组:\(\)
一
错误示范: grep -o "[ab]\+" test
输出:只要字符包含ab就输出
正确示范:grep -o "\(ab\)\+" test
二
grep -o "(ab\)\{2,\} test
注意这里不能认为就是ab两次或以上而是同行包含abab
\1 开头和结束字母要相同
首先得对文件设置特定环境test.txt
要求显示开头结尾相同的内容
cat test.txt
ababsfdfsfsaabb
aabbdfsfsfdffsaffb
adfbdfwebggadffb
错误示范
grep "\(a..b\).*\(r..t\)$" test.txt
正确示范
grep "(\r..t).*\1$" test.txt
七 总结
正则这里算是介绍到这了但是只是这点还是不足够的,命令很多想要记住就得一遍又一遍的敲。
linux三剑客之一grep的更多相关文章
- (转)不看绝对后悔的Linux三剑客之grep实战精讲
不看绝对后悔的Linux三剑客之grep实战精讲 原文:http://blog.51cto.com/hujiangtao/1923675 https://www.cnblogs.com/peida/a ...
- Linux 三剑客之grep
目录 Linux 三剑客之grep 搭配命令-find 三剑客之grep: 正则表达式: Linux 三剑客之grep 搭配命令-find find命令是根据文件的名称或者属性查找文件,并不会显示文件 ...
- linux三剑客之grep
linux基础三剑客之grep 1.grep命令 基本介绍 grep命令是文本本过滤工具,是基于一个模式匹配文件的每一行,grep分类:egrep个fgrep. grep英文名:Global sea ...
- Linux三剑客之grep常用参数详细总结
三剑客grep总结 grep : Linux三剑客老三 过滤需要的内容 参数: grep一般常用参数: -a :在二进制文件中,以文本文件的方式搜索数据 -c :计算找到 ’ 搜索字符串 ...
- Linux三剑客老三---grep
1.Linux三剑客老三 过滤需要的内容,例子:grep -v oldboy hello.txt grep一般常用参数: -a:在二进制文件中,以文本文件的方式搜索数据. -c:计算找到"搜 ...
- Linux三剑客之grep 与 egrep
grep: Linux上文本处理三剑客 grep:文本过滤(模式:pattern)工具; *(grep, egrep, fgrep) sed:stream editor,文本编辑工具: awk:Lin ...
- Linux三剑客:grep、awk、sed
---------------------------------------------------------------------------------------------------- ...
- Linux 三剑客之 grep 使用详解
Linux 最重要的三个命令在业界被称为三剑客,它们是:awk.sed.grep.sed 已经在上篇中讲过,本文要讲的是 grep 命令. 我们在使用 Linux 系统中,grep 命令的使用尤为频繁 ...
- linux 三剑客命令(grep,sed ,awk)
grep 命令 :强大的文本’搜索’工具 1.grep -n 'word' file_name 在file_name文件中找到word所在的所有行并显示.-n 为显示行号. 2 ...
随机推荐
- idea编译时JDK版本变化
修改参考:http://www.cnblogs.com/woshimrf/p/5863248.html 添加maven-compiler-plugin插件.
- java Mac自动化-java和ant环境搭建
本文旨在帮助读者介绍,如果一个测试工程师拿到了mac本,该如何在本地搭建java和ant环境 其实在几年前,我们还大多使用的是windows本,而且我们也会比较善于使用windows笔记本,但自从ma ...
- Hive metastore表结构设计分析
今天总结下,Hive metastore的结构设计.什么是metadata呢,对于它的描述,可以理解为数据的数据,主要是描述数据的属性的信息.它是用来支持如存储位置.历史数据.资源查找.文件记录等功能 ...
- Go语言获取命令行参数
package main import ( "os" "fmt" ) func main() { args := os.Args //获取用户输入的所有参数 { ...
- redis —主从&&集群(CLUSTER)
REDIS主从配置 为了节省资源,本实验在一台机器进行.即,在一台机器上启动两个端口,模拟两台机器. 机器准备: [root@adailinux ~]# cp /etc/redis.conf /etc ...
- go 开发环境安装教程 windows
首先进入go 语言官网下载最新安装包,我目前安装的版本是 1.8.3版本:go1.8.3.windows-amd64.msi 如果下载慢,这个是百度云地址:https://pan.baidu ...
- CEF小白人系列1-认识CEF
手头上有个项目需要做浏览器的相关功能,评估了几个嵌入式方案最后选定CEF作为开发基础. 在入坑新技术的时候第一选择是去官网学习,这是一个非常好的习惯. CEF官网(请科学上网) https://bit ...
- js中的typeof和instanceof和===
typeof: 用于判断number/string/boolean/underfined类型/function 不能判断:null和object ,不能区分object和Array instanceo ...
- axios + mock.js模拟数据实现前后端分离开发的实例代码
首先就是必须安装axios和mock.js npm install axios npm install mockjs 1. 然后在文档src中新建一个mock.js文件,如图 2. 在main.js中 ...
- 《精通android网络开发》--HTTP数据通信
No1: 例如:http://www.*****.com/china/index.htm 1)http:// 代表超文本传送协议,通知*****.com服务器显示web页,通常不用输入 2)www 代 ...