grep正则表达式基础

grep: Global search REgular expression and Print out the line.

在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。即正则表达式就是记录文本规则的代码,正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串。vim、grep、awk 、sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大;首先要记住的是: 正则表达式与通配符不一样,它们表示的含义并不相同。

命令格式:

grep [OPTIONS] PATTERN [FILE...]

选项:

--color=auto: 对匹配到的文本着色显示;

-v: 显示不能够被pattern匹配到的行;

-i: 忽略字符大小写;

-o: 仅显示匹配到的字符串;

-q: 静默模式,不输出任何信息;

-A #:after, 后#行

-B #: before, 前#行

-C #:context, 前后各#行

-a 以文本文件方式搜索

-n 顺便输出行号

举例说明:

在/etc/passwod文件中查找含有root的行

-v :显示不能够被指定的pattern匹配到的行

-o :仅显示匹配到的字符串

-q :静默模式,不输出任何信息

-A #:after 后#行

准备测试文件 :以fstab文件为例

基本正则表达式元字符:

字符匹配:

.:  匹配任意单个字符;

[]: 匹配指定范围内的任意单个字符

[^]:匹配指定范围外的任意单个字符

查询在/etc/passwd文件中,所有以s开头以n结尾的,中间可以出现任何两个字符的

[] 表示其中的某一个字符 ,例如[ade] 表示a或d或e

如果过滤必须是三个字母后面跟一个t的,应该使用这样的方式过滤,没有包含特殊字符

可以用^符号做[]内的前缀,表示除[]内的字符之外的字符,搜索oo前没有g的字符串所在的行. 使用 ‘[^g]oo‘ 作搜索字符串

[] 内可以用范围表示,比如[a-z] 表示小写字母,[0-9] 表示0~9的数字, [A-Z] 则是大写字母们。[a-zA-Z0-9]表示所有数字与英文字符。 当然也可以配合^来排除字符。

匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数;

*:匹配前面的字符任意次;

grep通常工作在贪婪模式下

修改文本,添加x

.*:任意长度的任意字符;

\?:匹配其前面的字符0或1次;即前面的可有可无;

\+:匹配其前面的字符至少1次;

\{m\}:匹配前面的字符m次;

\{m,n\}:匹配前面的字符至少m次,至多n次

\{0,n\}:匹配前面的字符至多n次;

\{m,\}:匹配前面的字符至少m次;

精确指定出现的次数 \{m\}匹配前面的字符出现m次

\{m,n\}:匹配前面的字符至少m次,至多n次

. * 只能限制0个或多个, 如果要确切的限制字符重复数量,就用{范围} 。范围是数字用,隔开 2,5 表示2~5个,2表示2个,2, 表示2到更多个。注意,由于{ }在SHELL中有特殊意义,因此作为正则表达式用的时候要用\转义一下。

搜索包含两个o的字符串的行。

搜索g后面跟2~5个o,后面再跟一个g的字符串的行

搜索包含g后面跟2个以上o,后面再跟g的行

注意,相让[]中的^ - 不表现特殊意义,可以放在[]里面内容的后面。

另外shell 里面的反向选择为[!range], 正则里面是 [^range]

位置锚定:

^:行首锚定;用于模式的最左侧;

$:行尾锚定;用于模式的最右侧;

搜索末尾是.的行

^PATTERN$: 用于模式匹配整行;

^$: 空行;搜索空行

搜索非空行

^[[:space:]]*$: *表示前面可以没有空格

在bash中*代表通配符,用来代表任意个 字符,但是在正则表达式中,他含义不同,*表示有0个或多个 某个字符。
例如 oo*, 表示第一个o一定存在,第二个o可以有一个或多个,也可以没有,因此代表至少一个o.
点. 代表一个任意字符,必须存在。 g??d 可以用 ‘g..d‘ 表示。 good ,gxxd ,gabd .....都符合。

\< 或 \b:词首锚定;用于单词模式的左侧;

\> 或 \b:词尾锚定;用于单词模式的右侧;

\<PATTERN\>:匹配整个单词;

分组:
\(\):将一个或多个字符捆绑在一起,当作一个整体进行处理;

例如锚定hr出现n次,将一个或多个字符捆绑在一起当做一个整体进行处理,这就是分组机制。


Note: 分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...
\1: 从左侧起,第一个左括号以及与之匹配右括号之间的模式所匹配到的字符;
后向引用:引用前面的分组括号中的模式所匹配字符,(而非模式本身)

使用egrep从ifconfig的结果中提取ip地址的方法:

过滤email地址:正则表达式首先通过“ \w ”来匹配了一个或者多个文字数字式字符。然后在匹配 @ 之后同样通过“ \w ”匹配了一个或者多个文字数字式字符。接着是匹配“ . ”(通过“ \. ”),接着是另外一个文字数字式字符,从而完成了对 Email 地址的匹配。

过滤电话号码:

时间: 2024-08-11 05:44:49

grep正则表达式基础的相关文章

grep与正则表达式基础

目录 grep 正则表达式 grep用法简介 我们介绍GREP的用法,主要用于匹配行,我们借助下面的正则表达式来介绍如何使用grep,还有就是正则表达式在linux中是极为重要的一部分. 1 命令:grep 2 格式:grep [option] "pattern" filename 3 选项: 4 -v:反向选择 5 -i:忽略大小写 6 -n:显示行号 7 -c:统计行数 8 -o:仅显示匹配到的字符串 9 -w:匹配整个单词 10 -q:不输出任何信息 11 -A 2:after

grep正则表达式与grep用法详解

功能:输入文件的每一行中查找字符串. 基本用法: grep [-acinv] [--color=auto] [-A n] [-B n] '搜寻字符串' 文件名 参数说明: -a:将二进制文档以文本方式处理-c:显示匹配次数-i:忽略大小写差异-n:在行首显示行号-A:After的意思,显示匹配字符串后n行的数据-B:before的意思,显示匹配字符串前n行的数据-v:显示没有匹配行-A:After的意思,显示匹配部分之后n行-B:before的意思,显示匹配部分之前n行 --color:以特定颜

grep正则表达式详解及练习

grep正则表达式详解及练习 一.在学习grep正则表达式前,先了解下linux著名的文本处理三剑客: (1)grep.egrep.fgrep 文本搜索工具. (2)sed     文本编辑工具,一种流编辑器,行编辑工具. (3)awk 强大的文本分析工具,文本格式化工具,文本报告生成器. 以上三大命令均支持正则表达式,本文以grep正则表达式为例展开学习. 1.什么是正则表达式? 正则表达式(Regular Expression):由一类特殊字符及文本字符所编写的模式,其有些字符不表示其字面意

grep正则表达式原理介绍及应用实例

应用背景:我们刚刚添加了一个用户Luffy,但是不知道他的默认shell是什么. 问题:如何取出一个用户的默认shell? 解决方法: #grep '^Luffy\>' /etc/passwd | cut -d: -f7 /bin/bashf 通过上面的方法,我们就得到了Luffy这个用户的默认shell 文本搜索工具:就是要根据用户指定的文本模式,逐行的进行匹配,最终得到符合文本模式的行 grep是一个强大的文本搜索工具,下面我们就介绍一下grep的语法: grep [OPTIONS] PAT

Linux 基础入门----正则表达式基础

介绍 虽然我们这一节的标题是正则表达式,但实际这一节只是介绍grep,sed,awk这三个命令,而正则表达式作为这三个命令的一种使用方式(命令输出中可以包含正则表达式).正则表达式本身的内容很多,要把它说明清楚需要单独一门课程来实现,不过我们这一节中涉及到的相关内容通常也能够满足很多情况下的需求了. 想要更深入地学习使用正则表达式,在这里 正则表达式基础. 一.正则表达式 什么是正则表达式呢? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英语:Regular Ex

1.11正则表达式基础(学习过程)

正则表达式基础 实验介绍 虽然我们这一节的标题是正则表达式,但实际这一节实验只是介绍grep,sed,awk这三个命令,而正则表达式作为这三个命令的一种使用方式(命令输出中可以包含正则表达式).正则表达式本身的内容很多,要把它说明清楚需要单独一门课程来实现,不过我们这一节中涉及到的相关内容通常也能够满足很多情况下的需求了. 想要更深入地学习使用正则表达式,在这里 正则表达式基础. 一.正则表达式 什么是正则表达式呢? 正则表达式,又称正规表示式.正规表示法.正规表达式.规则表达式.常规表示法(英

bash shell学习-正则表达式基础 (笔记)

A gentleman is open-minded and optimistic; a small person is narrow-minded and pessimistic. "君子坦荡荡,小人长戚戚" 参考资料:鸟哥的Linux私房菜 基础学习篇(第三版) 一.正则表达式基础 1.什么是正则表达式 正则表达式(Regular Expression, RE)是对字符串操作的一种逻辑公式,就是用一些事先定义好的特定字符及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串

linux入门之grep 正则表达式案例

grep 正则表达式案例 案例一: 1.显示/proc/meminfo文件中以大小s开头的行:(要求:使用两种方式) #grep -i '^s' /proc/meminfo #grep  '^[Ss]' /proc/meminfo #grep -E '^(s|S)' /proc/meinfo 2.显示/etc/passwd文件中不以/bin/bash结尾的行 #grep -v '/bin/bash$' /etc/passwd 3.显示用户rpc默认的shell程序 #grep '^\<rpc\>

grep 正则表达式

名字 grep, egrep, fgerp 解释: grep是一个最初用于Unix操作系统的命令行工具. 在给出文件列表或标准输入后, grep会对匹配一个或多个正则表达式的文本进行搜索, 并只输出匹配(或者不匹配)的行或文本. 用法: grep [option] 'PATTERN' file ... --color=auto          常用选项[option]:               -v : 反向匹配, 显示不能被模式匹配到的行.               -o : 只显示被