grep中使用正则表达式

1. intruduction

GREP 全称Global search Regular Expression and Print out the line,用于搜索文件并将匹配的行打印出来,它可以使用regex 来搜索文本。它在一个或多个文件中搜索字符串pattern。如果pattern包括空格,则必须被引用(建议引用所有内容),pattern后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作

sysopsis

grep [option] [pattern] [file... ]

pattern 实际上是正则表达式regex, 可用单引号‘ ‘ 将pattern括起来以避免shell通配的影响。

2. option

-# 同时显示匹配行上下的#行,如:grep -2 pattern filename同时显示匹配行的上下2行。选项-C的简写方式

-C grep -C 5 foo file  显示foo及前后各5行

-B before grep -B 5 foo file  显示foo及前5行

-A after  grep -A 5 foo file  显示foo及后5行

-i,--ignore-case    忽略大小写差别。

-n,--line-number  在匹配的行前面打印行号,需要修改相应配置文件的内容时相当有用

-c,--count   只打印匹配的行数,不显示匹配的内容。

-v,--revert-match  反检索,只显示不匹配的行。

-V --version

-q,--quiet   取消显示,只返回退出状态。0则表示找到了匹配的行;找不到返回1;搜索的文件不存在返回2

-w 只匹配整个单词

-r/ -R/ -d  --recursive  #此参数的效果和指定“-d recurse”参数相同,遍历目录下的所有文件,

-L:输出时只显示不包含匹配项的文件名,通常与-r选项连用来查找带指定内容的文件。

-l:输出时只显示包含匹配项的文件名。

-h  --no-filename  #在显示符合样式的那一列之前,不标示该列所属的文件名称。

-H  --with-filename  #在显示符合样式的那一列之前,表示该列所属的文件名称。(默认方式)

-s,--silent  不显示关于不存在或者无法读取文件的错误信息。

-o:输出时每行只显示匹配项内容

-E  相当于egrep,支持扩展的正则表达式

-F  相当于fgrep

--color 高亮显示匹配项内容,如经常使用的命令别名alias grep=‘grep --color=auto‘

3. grep 中应用正则表达式

Linux中的命令grep, find, sed, awk 等支持regex

正则表达式分为基本正则表达式(grep -e)和扩展正则表达式(grep -E)。下面分别简单总结一下。

基本正则表达式base-regex


元数据


意义和范例


^word


搜寻以word开头的行。

grep -vn ‘^#’ regular.txt #过滤掉以#开头的行。


word$


搜寻以word结束的行

grep -n ‘.$’ regular.txt,


^$


匹配空行


\


转义字符,忽略正则表达式中特殊字符的原有含义

grep -n ‘\$” regular.txt 搜索包含$的行。


.


匹配任意一个字符。

grep -n ‘e.e’ regular.txt #可以匹配eee,eae,eve等,但不匹配ee


*


匹配任意字符串,长度可为0。

grep -n ‘go*gle’ regular.txt #可以匹配glgle,gogle,google.....


.*


匹配所有字符


[list]


匹配一系列字符中的一个。

grep -n ‘g[lf]’ regular.txt 可以匹配gl,gf


[n1-n2]


匹配一个字符范围中的一个字符。

grep -n ‘[0-9]’ regular.txt #匹配数字字符

grep -n ‘[a-z]‘ regular.txt  #匹配a-z中的任意一个字符

更多示例[a-z],[0-9],[A-Z],[a-zA-Z0-9]


[^list]


匹配字符集以外的字符

例如:grep –n ‘[^o]‘ regular.txt

匹配非o字符


\<word


匹配以work开头的单词。

grep -n ‘\<g’ regular.txt #匹配以g开头的单词


word\>


匹配以word结尾的单词

grep -n ‘tion\>’ regular.txt #匹配以tion结尾的单词


\{n,m\}


匹配前面的字符重复次数在n到m之间,包括n和m。

grep -n ‘go\{2,3\}gle’ regular.txt #可以匹配google, gooogle

grep 要对{}转义


\{n\}


匹配前面的字符重复n次。


\{n,\}


匹配前面的字符n次或n次以上。

扩展正则表达式

grep一般情况下支持基本正则表达式,可以通过参数-E支持扩展正则表达式,另外grep单独提供了一个扩展命令叫做egrep用来支持扩展正则表达式,这条命令和grep -E等价。虽然一般情况下,基本正则表达式就够用了。特殊情况下,复杂的扩展表达式,可以简化字符串的匹配。

扩展正则表达式就是在基本正则表达式的基础上,增加了一些元字符。


元数据


意义和范例


+


重复前面字符1到多次。

grep -nE go+d’ regular.txt , 等价于 grep -n ‘go\{1,\}‘ regular.txt

匹配god,good,goood等等字符串


?


匹配0或1次前面的字符

grep -nE ‘go?d’ regular.txt 等价于grep -n ‘go\{0,1\}d‘ regular.txt

匹配gd,god


|


或(or)的方式匹配多个字串

df -h | grep -nE ‘/var$|/opt/IBM/db2|/tmp$|/var$‘

查看指定的多个文件系统的信息


()


匹配整个括号内的字符串,原来都是匹配单个字符

grep -nE ‘g(oo|la)’ regular.txt

匹配good或者glad

4. 如何对grep中的pattern加引号

事实上, 对字符串的解析是由shell完成再传递给grep,所以参考shell的特殊字符,以正确使用引号来确保表达正确,在此仍作简单说明。

‘ ‘ 单引号,字符串保持原样输出

" " 双引号,字符串中的` ` ,$, \ 等特殊字符会被shell解释替换后,再传递给grep

对普通的字符串(没有特殊字符和空格的字符串)也可以不加引号,直接搜索。

[[email protected] test]$ grep -n $HOME regular.txt

2:/home/ade

[[email protected] test]$ grep -n "$HOME" regular.txt

2:/home/ade

[[email protected] test]$ grep -n ‘$HOME‘ regular.txt

5:$HOME

[[email protected] test]$ grep -n "\$HOME" regular.txt

5:$HOME

所以除非刻意要使用shell替换功能,否则一直使用单引号来搜索你想要的内容是比较好的习惯。

5. eg

grep -v ‘^#‘  file.conf 过滤以#开头的行

grep  -v ‘^$‘   过滤空行

grep -c ‘HOME‘ file.conf  统计文件中HOME的个数

crontab -l | grep  grep -v ‘^#‘

crontab -l | grep -n ‘* 0 /‘   查找指定时间的任务

crontab -l | grep -B 2  "check_backup"     你仍需要对应cron job前的注释,以便清楚其含义。

grep -l ‘mdadm‘ /var/log/* 搜索包含特定内容的日志文件

grep -2 "initdefault" /etc/inittab 想看看匹配前后两行的内容

df -g | grep -nE ‘/var$|/opt/IBM/db2$|/tmp$|/var$‘    仅查询特定分区人信息。

ls -1 | grep ‘t[abc]ab‘   传递给grep的字符串为t[abc]ab. 当然也可以直接让shell来解释来找到想要的文件ls -1 t[abc]ab 。所以使用正则表达时要清楚什么样的字符串传递给哪一个程序处理。

grep ‘\\‘ regular.txt   搜索文件中的\而不是\\.

related

egrep  相当于grep -E

fgrep 想当于grep -F

时间: 2025-01-04 13:53:50

grep中使用正则表达式的相关文章

Linux grep 命令中的正则表达式详解

在 Linux .类 Unix 系统中我该如何使用 Grep 命令的正则表达式呢? Linux 附带有 GNU grep 命令工具,它支持扩展正则表达式(extended regular expressions),而且 GNU grep 在所有的 Linux 系统中都是默认有的.Grep 命令被用于搜索定位存储在您服务器或工作站上的任何信息. 正则表达式 正则表达式就是用于匹配每行输入的一种模式,模式是指一串字符序列.下面是范例: ^w1 w1|w2 [^ ] grep 正则表达式示例 在 /e

Linux中grep、egrep正则表达式的使用

正则表达式的由来 正则表达式,英文写法Regular Expression,在编程语言中常被简写为regex.regexp等.它是用来描述.匹配一系列符合某个句法规则字符串的单个字符串. 正则表达式通常被用来检索.替换那些符合某个模式(Pattern)的文本. 1950年代,UNIX之父Ken Thompson将正则表达式引入编辑器QED,然后是编辑器ed,最终引入到grep中.从此,正则表达式被广泛地应用到了各种UNIX或类UNIX系统的工具之中,例如perl. 近些年来,主流操作系统.主流开

Linux中grep,egrep正则表达式基本用法

正则表达式 本人第一次写博文.由于最近刚好学到了正则表达式基本使用方法.整理了一下,以后用于回顾查找. 正则表达式基本说明: 基本来说,正则表达式式一种用来描述一定数量文本的模式,正则表达式的简写为REGEX 全称Regular Express. 首先正则表达式对于Linux运维工程师来说非常重要,这将伴随每一个运维工程师的职业生涯.说到正则表达式那么不得不说一下grep和egrep,grep全称是Globally search for a Regular Expression and prin

linux下的grep,egrep及正则表达式

一, linux上常用的文本搜索工具,grep家族和正则表达式及介绍   linux上常用的文本搜索工具: grep(egrep,fgrep):文本搜索工具:基于"pattern"对给定文本进行搜索操作: sed:Stream EDitor,流编辑器,行编辑工具:文本编辑工具: awk:GNU awk,文本格式化工具:文本报告生成器: 正则表达式:由一类特殊字符及文本字符所编写的模式,其有些字符不表示其字面意义,而是用于表示控制或通配的功能: 一般分为两类: 基本正则表达式:BRE 扩

Coursera-Getting and Cleaning Data-week4-R语言中的正则表达式以及文本处理

Coursera-Getting and Cleaning Data-Week4 Thursday, January 29, 2015 补上第四周笔记,以及本次课程总结. 第四周课程主要针对text进行处理.里面包括 1.变量名的处理 2.正则表达式 3.日期处理(参见swirl lubridate包练习) 首先,变量名的处理,奉行两个原则,1)统一大小写tolower/toupper:2)去掉在导入数据时,因为特殊字符导致的合并变量 3)不要重复:4)少用代码缩写 使用的函数包括 替换查找:

grep命令以及正则表达式,算数运算.

最近一段时间一直在学习算术运算和正则表达式以及条件判断,连续看了四五遍,基本概念已经能够搞清楚了,实际操作中容易把正则表达式和算术运算以及条件判断混淆.看来还是要勤加联系.今天终于是有勇气来总结这两周的学习.在这之前,因为在练习这些逻辑概念性的知识经常会用到grep命令.首先介绍一下grep. 格式:grep [options] 'PATTERN' file,... grep: 文本搜索工具,根据用户指定的文本模式对目标文件进行逐行搜索,显示文件中能够被模式所匹配到的行. 模式PATTERN:指

grep与egrep正则表达式

表达式 含义 c 任何与自己匹配的非特殊字符c \c 去掉字符c的任何特殊意义 ^ 行首 $ 行尾 . 任意单个字符 [...] ...字符中的任一字符,像a-z这样的区间是合法的 [^...] 不在...中的任意单个字符 \n 第n个\(...\)所匹配的字符(仅于grep中) r* r出现零或多次 r+ r出现一或多次(仅于egrep中) r? r出现零或一次(仅于egrep中) r1r2 r2紧随r1 r1|r2 r1或r2(仅于egrep中) \(r\) 带标记的正则表达式r(仅于gre

linux基础:shell中的正则表达式用法大全

在Linux系统中,正则表达式(RegularExpression)是通过一些特殊字符的排列,用以查找.替换.删除等操作的强大工具,对于每一个Linux用户,都是非常重要的.在现有的系统中,正则表达式也分为基础正则表达式(grep),扩展正则表达式(egrep).在正式了解正则表达式之前,先了解一些相关的字符概念,它们在正则表达式中都有特殊的含义与用法. 对于基础正则表达式grep而言,每个特殊字符分别有不同的匹配: 1.字符匹配: .     :匹配任意单个字符       [ ]    :匹

grep命令以及正则表达式

grep以及正则表达式 Grep 根据模式(文本字符和正则表达式的元字符组合而成匹配条件)搜索文本,并将符合模式的文本行显示出来. 1.1grep家族: grep:基本正则表达式使用的命令 egrep:扩展正则表达式使用的命令 fgrep(fast grep):不支持正则表达式,在没有正则表达式的字符串中的使用效率非常高,cup资源消耗少 1.2grep命令格式 grep  [options] PATTERN [FILE...] 1.2.1option -i忽略大小写 --color:对匹配出来