linux之正则表达式和grep

简介:

 正则表达式(basic regexp):包含了很多的元字符,元字符表达的不是本身的意义,而是某种通配的或是次数匹配的其他意义。

grep仅支持基本正则表达式

匹配字符的

:匹配任意单个字符

grep "r..t" /etc/passwd

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

[Cc]at表示匹配以C或是c开头的at

[^]表示取反

 [^ab]表示匹配除了ab以外的其他单个字符

指定字符集的:

[[:upper:]]=[A-Z];[[:lower:]]=[a-z];[[:digit:]]=[0-9] [[:alpha:]]=[a-zA-Z] [[:alnum:]]=[a-zA-Z0-9]

[[:space:]]表示空格  [:punct:]表示所有的标点符号

匹配次数

:匹配其前面的字符任意次

ab*c:abc abbc ac

.*:匹配以字符开头的后面任意长度的任意字符,也称为贪婪模式

grep  --color "r.*t" /etc/passwd

X\{m,n\} 表示x至少出现m次,至多出现n

X\{m,\}  表示x至少出现m次,至多不限

x\{0,n\} 表示至多出现n

例:查看/etc/passwd中至少包含了一个空白字符的行

grep [[space]]\{1,\}” /etc/passwd

?:匹配其前面的字符0次或1

ab?c的匹配结果是abc,ac

锚定符

行的锚定符

  ^:锚定行首

  ^r..t 表示以行首必须出现r..t

  $:锚定行尾

  ^$:锚定空白行

例:找出/etc/inittab中的空白行

grep “^$” /etc/inittab

词的锚定符

\<:锚定词首 也可以用\b来锚定词首

  \< r...t

\>:锚定词尾  也可以用\b来锚定词尾

  r..t\>

词组引用:

\(\):表示对字符进行分组,然后用\1\2进行后向引用

\(\(\)\):\1表示引用第一个括号中的内容,\2表示引用第二个括号中的内容

例子:

1.he love his lover

grep \(l..e\).*\1r ab.txt

找出/etc/inittab下以数字开头和以开头数字结尾的行

grep –color “^\([0-9]\).*\1$” /etc/inittab

这个例子中的^字符表示锚定行首,$表示锚定行尾。[0-9]表示数字

\1则表示引用行首的数字;.*则表示任意字符

查找当前系统上名字为user,名字后跟数字的用户的相关信息

grep “^user[0-9]\{1,\}\>” /etc/passwd

grep --color“^#[[:space:]]\{1,\}[^[:space:]]” /etc/inittab

grep 选项

 -v:对结果取反

例:找出/etc/inittab中的非空白行

grep –v “^$” /etc/inittab

 -i:忽略大小写

查找/etc/inittab下的大写c和小写c

grep –i “c”/etc/inittab

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

 -E:支持扩展正则表达式

 -A n:表示显示匹配到的下面的n

 -B n:表示显示匹配到的上面的n

 -C n:表示显示匹配到的上下n

例:取出当前系统上以eth开头的网路设备的ip地址

ifconfig | grep –A 1 “eth” | grep –o “addr:[0-9]\{1,\}”

扩展的正则表达式(extended regexp

  扩展正则表达式基本上和正则表达式的元字符都大同小异,除了下面的元字符稍微有些不一样,其他的用法都是一样的,这里就不再说明了。

正则表达式中的           扩展正则表达式

\(\)                      ()另外还可以用作分组

     \m,n\                  {m,n}

 做次数匹配

  +:次数匹配,匹配其前的字符至少一次

下面是用正则表达式和扩展正则表达式表示/ect/inittab中的以#开头的包含至少一个空白字符,和非空白字符的行

grep --color“^#[[:space:]]\{1,\}[^[:space:]]” /etc/inittab

grep –color –E “^#[[:space:]]+[^[:space:]]” /etc/inittab

  |或者 a|b表示ab都行, (C|c)at

egrep命令和grep -E 表示后面是扩展正则表达式的元字符匹配

例:取出ifconfig命令结果中的1-255之间的位数

ifconfig | grep -E

 “\<([1-9]|[1-9][0-9])|1[0-9]{2}|2[0-5]{2})\>”

在这个例子中\<\>是锚定词首和词尾就是这个词开头和结尾都必须是数字,|表示扩展正则表达式中的或者 ,()表示分组,第一个[1-9]表示一位数;[1-9][0-9]表示两位数;1[0-9]{2}表示三位数,其中{2}表示匹配[0-9]两次;2[0-5]{2}表示小于255的三位数。

本文转自  沐木小布丁  51CTO博客,原文链接:http://blog.51cto.com/sxhxt/905814

相关文章
|
3月前
|
Linux
认识Linux指令之 “find grep” 命令
认识Linux指令之 “find grep” 命令
认识Linux指令之 “find grep” 命令
|
4月前
|
Linux
【linux】find、xargs、grep 联合查找文件内容
【linux】find、xargs、grep 联合查找文件内容
90 1
|
5月前
|
Linux 测试技术
软件测试/测试开发|一文详解Linux grep命令
软件测试/测试开发|一文详解Linux grep命令
59 1
|
2月前
|
存储 监控 Linux
性能工具之linux三剑客awk、grep、sed详解
Linux 三剑客 awk,sed和grep 在性能领域广泛用于性能建模、性能监控及性能分析等方面,也是各大互联网公司测试岗高频面试题,中高端测试人员必备技能之一。
59 1
性能工具之linux三剑客awk、grep、sed详解
|
14天前
|
Linux 数据库 开发者
【专栏】在Linux系统管理中,熟练使用命令行工具查找文件至关重要:如何按名称和 Grep 内容查找文件?
【4月更文挑战第28天】在Linux系统管理中,熟练使用命令行工具查找文件至关重要。本文介绍了如何使用`find`和`locate`按名称查找文件,以及结合`grep`按内容搜索。`find`能基于多种属性搜索,包括文件系统层次,而`locate`依赖索引数据库,速度更快。`grep`则用于在文件中搜索特定文本,支持正则表达式和多种选项。通过组合`find`/`locate`和`grep`,可实现更复杂的搜索任务,提升工作效率。
|
14天前
|
Rust 监控 安全
【专栏】`ripgrep`(rg)是Linux下快速、内存高效的文本搜索工具,用Rust编写,支持PCRE2正则表达式
【4月更文挑战第28天】`ripgrep`(rg)是Linux下快速、内存高效的文本搜索工具,用Rust编写,支持PCRE2正则表达式。相比`grep`,它在处理大文件和复杂模式时更具优势。安装`rg`可通过软件包管理器,如在Debian系系统中使用`sudo apt install ripgrep`。基本用法包括简单搜索、递归搜索、忽略大小写、显示行号等。高级功能包括固定字符串搜索、多文件匹配、并行搜索、排除选项和区域搜索。适用于日志分析、代码审查等场景,是提升工作效率的利器。
|
29天前
|
Linux
Linux 指令|date|cal|find|grep|热键
Linux 指令|date|cal|find|grep|热键
|
5月前
|
Linux Shell 开发工具
Linux tail & cat & grep 命令详解
Linux tail & cat & grep 命令详解
234 0
|
2月前
|
算法 Shell Linux
【Shell 命令集合 文档编辑】Linux 文本搜索工具 grep命令使用指南
【Shell 命令集合 文档编辑】Linux 文本搜索工具 grep命令使用指南
32 4
|
2月前
|
存储 算法 Shell
【Shell 命令集合 文档编辑】Linux 正则表达式匹配 egrep命令使用教程
【Shell 命令集合 文档编辑】Linux 正则表达式匹配 egrep命令使用教程
12 0