linux初学之——正则表达式及grep系

grep  sed   awk 被称为文本处理三剑客,本篇主要讲下grep。

grep: Global search Regular Expression and Print out the line

利用正则表达式进行全局搜索并将匹配的行显示出来;

想要对grep进行深入了解就要先对正则表达式进行初步认知和学习,接下来,我们先介绍下正则表达式。

正则表达式

正则表达式:是一类字符所书写出的模式(pattern);元字符:不表示字符本身的意义,用于额外功能性的描述。

正则表达式元字符:

基本的正则表达式  BRE

GLOBBING------简化版的正则表达式:[] ? *

字符匹配:

. :匹配任意单个字符

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

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

所有字符集都可以放置[]之中用于匹配单个字符

[:lower:]: 所有小写字母

[:upper:]: 所有大写字母

[:alpha:]: 所有字母

[:digit:]: 所有十进制数字

[:space:]: 空白字符

[:alnum:]: 字母或数字

[:punct:]: 所有标点符号

[:xdigit:]:所有16进制数字

a-z:所有小写字母

0-9:所有10进制数字

次数匹配:  该类字符之前的那个字符可以出现的次数

*:其前面的字符可以出现任意次(0,1,多次)

\?:其前面的字符可有可无(0/1次)

\+:其前面的字符至少出现一次(一次或多次)

\{num\}:其前面的字符必须出现m次

\{m,n\}:其前面的字符至少出现m次至多出现n次;

\{,n\}:其前面的字符至少出现0次至多出现n次;

\{m,\}:其前面的字符至少出现m次,多多益善;

在正则表达式中表示任意长度任意字符的方式: .*

位置锚定字符:

行锚定:

行首锚定:^

行尾锚定:$

字锚定:

字首锚定:\<    \b

字尾锚定:  \>    \b

\b :旧版本中的锚定方法,建议不用

对于正则表达式引擎来说,字是由非特殊字符组成的连续字符串;

分组与引用字符:

\(PATTERN\) :将此PATTERN所匹配到的所有字符当做一个不可分割的整体来处理

在正则表达式引擎当中有一系列的内置变量,这些变量会保存所有分组内的字符信息,用于后向引用;这些变量依次是:\1 , \2 \3  ....

pattern1\(pattern2\)pattern3\(pattern4\(pattern5\)\)

\1:第一组小括号中pattrn匹配到的字符即pattern2

\2:第二组小括号中pattrn匹配到的字符即pattern4

\3:第三组小括号中pattrn匹配到的字符即pattern5

或:

\|

注意:\| 将其左右两边的字符串当做整体对待

扩展正则表达式  ERE

与基本正则不相同的部分:

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

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

{m,n}: 匹配其前面的字符至少 m 次,至多 n 次
       (): 分组
        a|b: a 或者 b

在对正则表达式进行初步了解后在继续学习 grep

grep [OPTIONS] PATTERN [FILE...]

PATTERN:过滤条件,是由正则表达式元字符以及没有特殊含义的文本字符组成;

正则表达式的元字符:会被正则表达式的引擎解释为特殊含义;

pcre-perl:语言的正则表达式引擎

基本额正则表达式:BRE

扩展的正则表达式:ERE

grep默认情况下仅支持基本正则表达式

egrep默认仅支持扩展正则表达式

fgrep默认不开启表达式引擎

文本字符:只具备字符表面含义的那些字符

常用选项:

-i, --ingore-case:忽略文本字符的大小写

-v, --invert-match:反向匹配;最终显示的结果是PATTERN不能成功匹配的行

-c, --count:计数,统计匹配PATTERN的所有行数

-o ,--only-mathing:关闭贪婪模式,仅显示PATTERN能匹配的内容

-q,--quiet,--silent:安静模式,不输出任何匹配结果

--color [=WHEN], --colour[=WHEN] :将匹配PATTERN的内容以高亮形式显示  --color=auto

-E:扩展的正则表达式,grep -E相当于 egrep

-F: grep -F相当于fgrep,

-G:基本的正则表达式,egrep -G相当于grep

-P;使用PCRE(Perl Common Regular Expression)引擎

-A NUM, --after-context=NUM  :显示匹配PATTERN行的同时显示其后面的NUM行

-B NUM, --before-context=NUM :显示匹配PATTERN行的同时显示其前面的NUM行

-C NUM, -NUM, --context=NUM  :显示匹配PATTERN行的同时显示其前后的NUM行

grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]

默认情况下,grep命令后面只允许有一个pattern,如果想要在一次grep搜索过程中写多个pattern需要使用-e选项,每个-e选项只能使用一个pattern作为参数;

将需要的PATTERN写入到一个文件中, 保证每行只有一个PATTERN;使用-f FILE方式来实现多PATTRN作为参数;

其他的文本处理命令:

wc:

wc[OPTION]...[FILE]

-l: 只显示行数

-w: 只显示字数

-c: 只显示字符数

cut:  remove sections from each line of files

能够被cut修剪的文件,一般都是具有一定结构或格式的文本文档;

cut OPTION... [FILE]...

-d, --delimiter=DELIM:指定在实施修剪操作时所依赖的分隔符,默认是空白符

-f,--fields=LIST:根据定义的分隔符来指定字段的编号

地址定界使用方法:

#:选择被指定的单个字段

#,#:离散的多个被指定的单个字段

#-#:连续的多个被指定的字段

--output-delimiter=STRING:指定输出分隔符

grep练习题:

1) 显示/etc/passwd文件中不以bash结尾的行;

#  grep -v ‘bash$‘

2)显示/etc/passwd文件中其默认的shell为非/sbin/nologin的用户

#  grep -v ‘/sbin/nologin$‘ /etc/passwd

3) 找出/etc/grub2.cfg(在CentOS6中是/etc/grub.conf)文件中,以空白字符开头的非空白行;

# grep --color=auto ‘^[[:space:]]\+[^[:space:]]‘ /etc/grub2.cfg

4)显示当前系统上rootx或bash用户的默认shell;

     # grep -E ‘^(root|bash):‘ /etc/passwd | cut -d: -f7

 5)找出/etc/rc.d/init.d/functions文件中某单词后跟一组小括号“()”行;

   # grep -E -o ‘\<[[:alnum:]]+\>\(\)‘ /etc/rc.d/init.d/functions 

6) 找出"ldd /usr/bin/vim"命令的结果中所有的文件路径;

# ldd /usr/bin/vim | cut -d‘ ‘ -f3

7) 找出/proc/meminfo文件中,所有以大写S或小写s开头的行,你有多少种方法实现该任务?

# cat /proc/meminfo | grep ‘^[sS]‘

# cat /proc/meminfo | grep ‘^[s|S]‘

# cat /proc/meminfo | grep -i ‘^s‘

时间: 2024-12-29 01:20:05

linux初学之——正则表达式及grep系的相关文章

Linux文本处理三剑客之grep及正则表达式

简要介绍 Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来.GREP是Global search Regular Expression and Print out the line的简称,即全局搜索正则表达式,它的使用权限是所有用户. 本篇文章从简明扼要,层次清晰的角度介绍grep命令和正则表达式,以及正则表达式和grep命令的配合使用. 1. 作用 文本搜索工具,根据用户指定的"模式(过滤条件)"对目标文本逐行进行匹配检查:打印匹

Linux 常用命令sed/awk/grep及正则表达式

linux命令sed和awk sed 主要功能 sed,stream editor.是一个"非交互式"字符流编辑器.输入流通过程序并输出到标准输出端. sed主要用来自动编辑一个或者多个文件(替换,插入,删除,追加,更改) 常见应用 抽区域 匹配正则表达式 比较域 增加,附加,替换 执行过程 sed一次处理一行或多行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区

Linux文本处理三剑客之grep一族与正则表达式

一,grep一族是什么? Linux上有三种常用的文本处理工具,分别为:grep(egrep.fgrep).sed.awk.这三者被称为Linux文本处理三剑客. grep一族:文本搜索工具 grep:支持使用基本正则表达式: egrep:支持使用扩展正则表达式,相当于grep -E: fgrep:不支持使用正则表达式,相当于grep -F; [PS:fgrep不需要加载正则表达式引擎,因此速度较快,fgrep的搜索效率在当文件达到几亿行时就能体现出来.(大型web网站一天的日志量都是几亿行的,

Linux 系统之正则表达式----grep 详解

一.正则表达式的起源: 正则表达式的"祖先"可以一直上溯至对人类神经系统如何工作的早期研究.Warren McCulloch 和 Walter Pitts 这两位神经生理学家研究出一种数学方式来描述这些神经网络. 1956 年, 一位叫 Stephen Kleene 的美国数学家在 McCulloch 和 Pitts 早期工作的基础上,发表了一篇标题为"神经网事件的表示法"的论文,引入了正则表达式的概念.正则表达式就是用来描述他称为"正则集的代数"

linux文本处理三剑客之grep家族及其相应的正则表达式使用详解

一.Linux文本处理三剑客.grep家族和正则表达式介绍 Linux上文本处理三剑客: grep(egrep, fgrep):文本搜索工具:基于"pattern(过滤条件)"对目标文本进行逐行搜索操作: sed:Stream Editor,流编辑器行编辑工具:文本编辑工具: awk:GNU awk,文本格式化工具:文本报告生成器: grep家族: grep: Global search REgular expression and Print out the line,支持使用基本正

Linux学习之正则表达式&grep&egrep

我们经常需要在文档中搜索符合自己要求的内容,这些部分可能分散在文档的各个位置,各个角落.可以利用关键字例如/keyword或者?keyword一个一个的搜索,还有我可能不止想搜索关键字,而是指定一个范围,怎样操作?而且怎样把这些搜索到的内容集中地显示出来?使用正则表达式搜索字串的grep命令和egrep命令就可以满足我们的这个要求. 正则表达式(Regular Expression)是一种字符书写的模式,以行为单位进行字符的处理,透过一些特殊字符的辅助,利用这种模式可以轻易地达到对字符的搜索.删

Linux的文本处理工具grep及初识正则表达式

一).Linux的三大文本处理之GREP: GREP(Global search REgular expression and Print out the line,全面搜索正则表达式并把行打印出来):在给出文件列表或标准输出后,grep会对匹配一个或多个正则表达式的文本进行搜索,并只输出匹配(或者不匹配)的行或文本.----摘自于维基百科 GREP家族包括: grep: egrep:支持扩展正则表达式的grep,等同于grep -E. fgrep:fixed grep或fast grep,不支

菜鸟的成长记录--linux正则表达式及grep

正则表达式 是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能:正则表达式使用单个字符串来描述.匹配一系列符合某个句法规则的字符串.在很多文本编辑器里,正则表达式通常被用来检索.替换那些符合某个模式的文本. 元字符:不表示其字面意义,而用于额外功能性描述,下面是常用的元字符列表 符号 含义 . 表示匹配任意单个字符,例a.,匹配ab.ac.ad.ax * 表示它前面的字符可以出现任意次,例a*b,匹配aab.b.ab \? 表示它前面的字符可有可无,例a\?b,匹配a

linux学习---正则表达式与grep

正则表达式(Regular Expression(RE)) 是透过一些特殊字符的排列, 用以"搜寻/取代/删除"一列或多列文字字符串, 简单的说, 正则表达式就是用在字符串的处理上面的一项"表达式". 正则表达式并不是一个工具程序, 而是一个字符串处理的标准依据, 如果想要用用正则表达式处理字符串, 就要使用支持正则表达式的工具程序, 这样的程序有很多, 如vi, awk, grep, sed... grep 基本规则: grep [-acinv] [--color