菜鸟学Linux 第013篇笔记 grep及正则表达式

简介:

菜鸟学Linux 第013篇笔记 grep及正则表达式



正则表达式:REGular EXEpression, REGEXP

Basic REGEXP: 基本

Extended REGEXP: 扩展



文本查找

grep, egrep, fgrep

grep: Global Research

使用基本正则表达式定义的模式来过滤文本的命令

根据模式搜索文本,并将符合模式的文本行显示出来

pattern: 文本字符和正则表达式的元字符组合而成的匹配条件]


command

grep (grep, egrep, fgrep - print lines matching a pattern)

-i, --ignore-case

--color Surround  the  matching  string  with  the  marker find in

GREP_COLOR environment  variable.

-v, --invert-match

Invert(倒置,反转)  the  sense  of  matching,  to  select non-matching

            lines.

-o, --only-matching

              Show  only  the  part of a matching line that matches PAT-TERN.

-E, --extended-regexp

              Interpret(解释,说明)  PATTERN  as an extended regular expression (see

              below).

-A NUM, --after-context=NUM(number)

              Print  NUM lines of trailing(结尾) context after matching lines.

              Places a line containing -- between contiguous(adj.相邻的)  groups  of

              matches.

-B NUM, --before-context=NUM

              Print NUM lines of leading(头) context before matching  lines.

              Places  a  line containing -- between contiguous groups of

              matches.

-C NUM, --context=NUM

              Print NUM lines of output context(上下).  Places a line contain-

              ing -- between contiguous groups of matches.

  

  

正则表达式:REGular EXEpression, REGEXP

元字符:匹配字符

. 表示匹配任意字符

.* 表示匹配任意字符任意长度

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

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

字符集 [:digit:], [:lower:], [:upper:], [:punct:], [:space:],

[:alpha:], [:alnum:]

匹配次数(贪婪模式)

* 表示匹配其前面的字符任意次

\? 表示匹配其前面的字符1次或0次

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

位置锚定

^ 锚定行首,此字符后边的模式匹配必须出现在行首

$ 锚定行尾,此字符前边的模式匹配必须出现在行首

^$ 表示空白行

\<或\b 锚定词首,表示其后面的任意字符必须作为单词首部出现

\>或\b 锚定词尾,表示其前面的任意字符必须为单词的尾部出现


分组:

\(\) 表示一个组,组里边的内容被看为整体,并且可以在后用某个字符来引用前边的分组

\1 表示引用前边从左起第1个左括号开始到与之对应的右括号结束匹配的内容

\2 ……

\n 表示引用前边从左起第n个左括号开始到与之对应的右括号结束匹配的内容

e.g.

\(ab\)* 匹配ab在行里可以出现0-n次

ab* 而不加则表示的是

grep '\(l..e\).*\1' test3.txt 

grep '\([0-9]\).*\1' /etc/inittab 

小练习(翻译含义)

grep '[[:digit:]]$' /etc/inittab 

grep '[[:space:]][[:digit:]]$' /etc/inittab 

grep '\broot\b' test2.txt

grep 'root\>' test2.txt

grep '\<root' test2.txt




扩展正则表达式grep -E= egrep

字符匹配:

. 表示匹配任意字符(同正则)

.* 表示匹配任意字符任意长度(同正则)

[] 匹配指定范围内的任意字符(同正则)

[^] 匹配指定范围外的任意字符(同正则)


次数匹配:

* 表示匹配其前面的字符任意次(同正则)

? 表示匹配其前面的字符1次或0次(同正则)

+ 匹配其前面的字符至少一次

{m,n} 同正则表达式只是不需要插入转译字符'\'



位置锚定:

^ 锚定行首,此字符后边的模式匹配必须出现在行首(同正则)

$ 锚定行尾,此字符前边的模式匹配必须出现在行首(同正则)

^$ 表示空白行(同正则)

\<或\b 锚定词首,表示其后面的任意字符必须作为单词首部出现(同正则)

\>或\b 锚定词尾,表示其前面的任意字符必须为单词的尾部出现(同正则)



分组的:含义相同只是不需要转译字符'\'(同正则)

()

\1, \2, \n ..


或者

e.g.

C|cat C或cat

grep -E 'C|cat' test6.txt 匹配 C 或cat 

grep -e '(C|c)at' text6.txt 匹配 Cat 或 cat



练习:

1、找出某文件中的,1位数,或2位数;

2、找出ifconfig命令结果中的1-255之间的整数;

3、查找当前系统上名字为user8(必须出现在行首)用户的账号的相关信息,/etc/passwd;















KEY

1、#grep -E '[[:digit:]]{1,2}' /proc/cupinfo

2、#ifconfig | egrep --color '\<([1-9]|[1-9][1-9]|1[0-9][0-9]|2[0-9][0-9])\>'

3、#grep -E '^(user8)' /etc/passwd

本文转自Winthcloud博客51CTO博客,原文链接http://blog.51cto.com/winthcloud/1861361如需转载请自行联系原作者


Winthcloud

相关文章
|
17天前
|
Ubuntu Linux Python
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
在Linux系统中,使用Tkinter库时可能会遇到中文显示乱码的问题,这通常是由于字体支持问题导致的,可以通过更换支持中文的字体来解决。
63 0
Tkinter错误笔记(一):tkinter.Button在linux下出现乱码
|
12天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
49 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
2月前
|
机器学习/深度学习 缓存 JavaScript
简单粗暴的正则表达式笔记
简单粗暴的正则表达式笔记
38 5
|
2月前
|
监控 Linux
linux之grep详解
linux之grep详解
|
2月前
|
存储 Linux Shell
linux查找技巧: find grep xargs
linux查找技巧: find grep xargs
34 13
|
2月前
|
机器学习/深度学习 存储 Linux
linux中强大且常用命令:find、xargs、grep
linux中强大且常用命令:find、xargs、grep
70 9
|
2月前
|
SQL 移动开发 Linux
linux下find、grep命令详解
linux下find、grep命令详解
158 8
|
3月前
|
Unix Linux 开发工具
linux笔记 diff及patch的制作与使用
这篇文章是关于Linux系统中使用`diff`命令生成补丁文件以及使用`patch`命令应用这些补丁的详细教程和实战案例。
68 2
linux笔记 diff及patch的制作与使用
|
3月前
|
Unix Linux C语言
在Linux中,grep和egrep命令的区别?
在Linux中,grep和egrep命令的区别?
|
3月前
|
Linux
Linux源码阅读笔记13-进程通信组件中
Linux源码阅读笔记13-进程通信组件中