图片 2

grep 正则表明式示例

在 /etc/passswd 目录中找找 ‘vivek’

grep vivek /etc/passwd

输出例子:

vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh
gitevivek:x:1002:1002::/home/gitevivek:/bin/sh

查找大小写放肆的 vivek(即不区分朗朗上口写的寻觅卡塔尔(قطر‎

grep -i -w vivek /etc/passwd

探索大小写任性的 vivek 或 raj

grep -E -i -w 'vivek|raj' /etc/passwd

位置最后的例子突显的,正是一个恢宏的正则表达式的模式。

应用 -e 选项搜索全数匹配 ‘–test–‘ 的结果。grep 会尝试把 ‘–test–‘
作为四个采撷解析:
grep -e ‘–test–‘ FILENAME

怎么仅仅只显示相配出的字符,并不是相配出的行?

采纳如下语法:

grep -o 正则表达式 文件名

您能够运用上边包车型大巴语法测验二个字符在系列中的重复的次数:
{N}
{N,}
{min,max}

通配符

你能够使用 “.” 来匹配单个字符。例子中相称以 “b” 开首以 “t”
结尾的3个字符的单词:

grep '/<b.t/>' 文件名

在这儿,

  • /< 相配单词前边的空字符串
  • /> 相称单词后边的空字符串

打字与印刷出唯有四个字符的全数行:

grep '^..$' 文件名

显示以二个点和三个数字起头的行:

grep '^/.[0-9]' 文件名

Linux 系统自带了支撑开展正则表明式的 GNU 版本 grep 工具。全体的 Linux
系统中私下认可安装的都以 GNU 版 grep 。grep
命令被用来探求一台服务器或工作站上其余地方的文本消息。

如何使用类别检查测量检验?

应用如下的语法,您能够检查评定多少个字符在系列中另行现身次数:

{N}
{N,}
{min,max}

要相称字符 “v” 出现四次:

egrep "v{2}" 文件名

下边包车型地铁指令能协作到 “col” 和 “cool” :

egrep 'co{1,2}l' 文件名

下边包车型地铁命令将会相配出至罕有八个 ‘c’ 字符的保有行。

egrep 'c{3,}' 文件名

上边的例子会相配 91-1234567890(即三个数字-10个数字) 这种格式的手提式有线电话机号。

grep "[[:digit:]]/{2/}[ -]/?[[:digit:]]/{10/}" 文件名

什么在 Linux 系统和类 Unix 的操作系统中运用带正则表明式的 grep 命令呢?

Linux 附带有 GNU grep 命令工具,它援救扩充正则表明式(extended regular
expressions),並且 GNU grep 在颇有的 Linux 系统中都以暗中认可有的。Grep
命令被用于寻觅一定期存款储在您服务器或职业站上的别的消息。

里头几个点都亟需被转义:
grep ‘192\.168\.1\.254’ /etc/hosts

正则表达式

正则表明式正是用以匹配每行输入的一种形式,格局是指一串字符连串。下边是典范:

^w1
w1|w2
[^ ]

图片 1

正则表明式节制符

限定符 描述
. 匹配任意的一个字符。
? 匹配前面的子表达式,最多一次。
* 匹配前面的子表达式零次或多次。
+ 匹配前面的子表达式一次或多次。
{N} 匹配前面的子表达式 N 次。
{N,} 匹配前面的子表达式 N 次到多次。
{N,M} 匹配前面的子表达式 N 到 M 次,至少 N 次至多 M 次。
只要不是在序列开始、结尾或者序列的结束点上,表示序列范围。
^ 匹配一行开始的空字符串;也表示字符不在要匹配的列表中。
$ 匹配一行末尾的空字符串。
/b 匹配一个单词前后的空字符串。
/B 匹配一个单词中间的空字符串。
/< 匹配单词前面的空字符串。
/> 匹配单词后面的空字符串。

不区分抑扬顿挫写地搜索 ‘vivek’ 和 ‘raj’ :
grep -E -i -w ‘vivek|raj’ /etc/passwd

锚点

您能够分别接受 ^ 和 $
符号来正则相配输入行的早先或最后。上面包车型地铁事例搜索展现唯有以 vivek
伊始的输入行:

grep ^vivek /etc/passwd

输出例子:

vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh

你能够独有只搜索出以单词 vivek 初叶的行,即不出示 vivekgit、vivekg
等(LCTT 译注:即该单词前面是空格、符号等法文的单词分隔符。)

grep -w ^vivek /etc/passwd

寻找以单词 word 结尾的行:

grep 'foo$' 文件名

十分仅仅只含有 foo 的行:

grep '^foo$' 文件名

经常来讲所示的例子能够查找空行:

grep '^$' 文件名

出口结果案例:
vivek:x:1000:1000:Vivek Gite,,,:/home/vivek:/bin/bash
vivekgite:x:1001:1001::/home/vivekgite:/bin/sh
gitevivek:x:1002:1002::/home/gitevivek:/bin/sh

在 Linux 、类 Unix 系统中自己该怎么着行使 Grep 命令的正则表明式呢?

确定地点检索内容的职位:
 你能够利用 ^ 和 $
符号强制叁个正则表达式分别相配一行的上马或停止之处。上边包车型地铁言传身教显示以
‘vivek’ 开始的公文。
grep ^vivek /etc/passwd

怎么使用 grep 的“或”相称?

应用如下的语法:

grep -E 'word1|word2' 文件名
或
egrep 'word1|word2' 文件名

或者是

grep 'word1/|word2' 文件名

三、正则表达式操作符总计

点字符转义

上面要同盟到 IP 地址为 192.168.1.254 的正则式是不正确的:(LCTT
译注:能够配合到该 IP 地址,可是也可能有不小可能特别到间距符号不是点的贴近格式)

grep '192.168.1.254' /etc/hosts

多少个点字符都须求转义:

grep '192/.168/.1/.254' /etc/hosts

下边包车型大巴事例只好合营出 IP 地址:(LCTT 译注:实际上由于 IP
地址中数字的取值范围,该正则表明式并不正确)

egrep '[[:digit:]]{1,3}/.[[:digit:]]{1,3}/.[[:digit:]]{1,3}/.[[:digit:]]{1,3}' 文件名

在 ‘/etc/passswd’ 中检索 ‘vivek’ 。
grep vivek /etc/passwd

图片 2

二、深远切磋 grep 高等寻找格局

什么使 grep 命令高亮显示?

接受如下的语法:

grep --color 正则表达式 文件名

2、如何同盟具体字符?

什么样寻觅以“-” 符号早先的卓殊形式?

要接收 -e 选项来寻找相称 ‘–test–’ 字符串,纵然不行使 -e 选项,grep
命令会试图把 ‘–test–’ 充任本人的选项参数来分析:

grep -e '--test--' 文件名

在底下这些事例中,相配全部大写字母:
grep ‘[:upper:]’ FILENAME

grep 和 egrep

egrep 等同于 grep -E
。它会以扩大的正则表达式的情势来讲明方式。上面来自 grep 的助手页:

主导的正则表明式元字符 ?、+、 {、 |、 ( 和 State of Qatar已经失去了它们原本的意思,要接纳的话用反斜线的版本 /?、/+、/{、/|、/(
和 /State of Qatar 来代表。 守旧的 egrep 并不帮忙 { 元字符,一些 egrep 的达成是以
/{ 代替的,所以三个可移植的脚本应该幸免在 grep -E 使用 {
符号,要相配字面包车型客车 { 应该利用 [}]。

GNU grep -E 试图援救守旧的用法,借使 {
出在在无效的区间标准字符串那前,它就能够假定 { 不是特殊字符。

举个例子,grep -E ‘{1′ 命令寻找包括 {1
三个字符的串,而不会报出正则表达式语法错误。

POSIX.2 标准允许这种操作的恢宏,但在可移植脚本文件里应该防止那样使用。

参考:

  • grep 和 regex 扶植手册页(7卡塔尔
  • grep 的 info 页

在任何情况下都寻觅 ‘vivek’  (即不区分抑扬顿挫卡塔尔(قطر‎:
grep -i -w vivek /etc/passwd

字符类

匹配 Vivek 或 vivek:

grep '[vV]ivek' 文件名

或者

grep '[vV][iI][Vv][Ee][kK]' 文件名

也得以合作数字 (即匹配 vivek1 或 Vivek2 等等卡塔尔:

grep -w '[vV]ivek[0-9]' 文件名

能够同盟三个数字字符(即 foo11、foo12 等卡塔尔(قطر‎:

grep 'foo[0-9][0-9]' 文件名

不光局限于数字,也能协作最少几个字母的:

grep '[A-Za-z]' 文件名

来得含有 “w” 或 “n” 字符的全部行:

grep [wn] 文件名

位居括号内的表达式,即包在 “[:” 和 “:]”
之间的字符类的名字,它代表的是归属此类的兼具字符列表。标准的字符类名称如下:

  • [:alnum:] – 字母数字字符
  • [:alpha:] – 字母字符
  • [:blank:] – 空字符: 空格键符 和 制表符
  • [:digit:] – 数字: ’0 1 2 3 4 5 6 7 8 9′
  • [:lower:] – 小写字母: ‘a b c d e f g h i j k l m n o p q r s t u v
    w x y z’
  • [:space:] – 空格字符:
    制表符、换行符、垂直制表符、换页符、回车符和空格键符
  • [:upper:] – 大写字母: ‘A B C D E F G H I J K L M N O P Q 宝马X3 S T U V
    W X Y Z’

在这里个事例所示的是匹配全体大写字母:

grep '[:upper:]' 文件名

你能够用 “.” 来取代单个字符。在底下的事例中,查询了富有以字母 “b”
开端、字母 “t” 结尾的八个字符的单词。
grep ‘\<b.t\>’ FILENAME

怎么选拔 grep 的“和”相配?

接纳下边包车型客车语法来呈现既富含 ‘word1′ 又蕴含 ‘word2′ 的装有行

grep 'word1' 文件名 | grep 'word2'

1、如何同盟你要寻觅的内容?

依照上面包车型客车语法彰显全部包蕴了单词 ‘word1′ 和 ‘word2′ 的结果:
grep ‘word1’ FILENAME | grep ‘word2’

正则表明式只但是是种种输入行相配的形式。方式是贰个字符类别。上面都以模范:

参照他事他说加以考察文献:
  • grep and regex 的扶植文书档案
  • grep 的 info扶植文书档案

grep使用简明及正则表明式
http://www.linuxidc.com/Linux/2013-08/88534.htm

正则表明式的用法
http://www.linuxidc.com/Linux/2013-03/81897.htm

正则表达式之零宽断言
http://www.linuxidc.com/Linux/2013-03/81897.htm

Linux命令-文件文本操作grep 
http://www.linuxidc.com/Linux/2015-12/126259.htm

grep正则表明式
http://www.linuxidc.com/Linux/2015-09/123035.htm

Linux中正则表明式与公事格式化管理命令(awk/grep/sed卡塔尔
http://www.linuxidc.com/Linux/2013-03/81018.htm

初藳链接:
正文链接:http://www.linuxstory.org/grep-regular-expressions/

本文长久更新链接地址:http://www.linuxidc.com/Linux/2016-01/127464.htm

图片 3

上边包车型大巴例证中将相配最少含有3个字母 c 的结果:
egrep ‘c{3,}’ FILENAME

您能够宽容两位数(比如相配 foo11 , foo12 ):
grep ‘foo[0-9][0-9]’ FILENAME

追寻并出示全数以 ‘.’ 和数字早先的结果:
grep ‘^\.[0-9]’ FILENAME

一、快捷领会正则表明式

要么能够那样:
grep ‘foo.*bar\|word3.*word4’ FILENAME

例如:“^w1”、“w1|w2”、“[^ ]”。

检索并出口全数多个字母的结果:
grep ‘^..$’ FILENAME

也许能够那样:
grep ‘[vV][iI][Vv][Ee][kK]’ FILENAME

4、如何测量试验类别?

admin

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注