当前位置: 欧洲杯竞猜 > 服务器运维 > 正文

命令中的正则表达式精解,六分钟教您轻轻便松

时间:2020-05-07 02:44来源:服务器运维
在 Linux 、类 Unix 系统中本人该怎么运用 Grep 命令的正则表达式呢? 什么在 Linux 系统和类 Unix 的操作系统中运用带正则表明式的 grep 命令呢? Linux 附带有 GNU grep 命令工具,它扶植扩充

在 Linux 、类 Unix 系统中本人该怎么运用 Grep 命令的正则表达式呢?

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

Linux 附带有 GNU grep 命令工具,它扶植扩充正则表明式(extended regular expressions),况兼 GNU grep 在富有的 Linux 系统中都以暗许有的。Grep 命令被用来搜索一定存储在你服务器或专门的职业站上的别的新闻。

Linux 系统自带了扶助开展正则表达式的 GNU 版本 grep 工具。全部的 Linux 系统中私下认可安装的都以 GNU 版 grep 。grep 命令被用来搜寻一台服务器或专门的学业站上别样地方的文本新闻。

欧洲杯竞猜 1

欧洲杯竞猜 2

正则说明式

正则表达式正是用于相称每行输入的一种形式,方式是指一串字符系列。下边是圭臬:

^w1
w1|w2
[^ ]

一、迅速驾驭正则表达式

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(即不区分朗朗上口写的搜索State of Qatar

grep -i -w vivek /etc/passwd

查找大小写任性的 vivek 或 raj

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

地点最终的事例呈现的,正是一个扩充的正则表明式的形式。

1、怎么样协作你要探究的剧情?

锚点

您能够独家接受 ^ 和 $ 符号来正则相配输入行的始发或最终。下边的事例搜索展现唯有以 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 或 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 福睿斯 S T U V W X Y Z’

在这里个例子所示的是相配所有大写字母:

grep '[:upper:]' 文件名

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

通配符

您能够使用 “.” 来相配单个字符。例子中相配以 “b” 伊始以 “t” 结尾的3个字符的单词:

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

在这儿,

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

打印出独有八个字符的全数行:

grep '^..$' 文件名

展示以三个点和叁个数字初阶的行:

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

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

点字符转义

下边要协作到 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}' 文件名

输出结果案例:
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

怎么样搜索以“-” 符号早先的匹配格局?

要使用 -e 选项来寻找匹配 ‘–test–’ 字符串,若是不利用 -e 选项,grep 命令会计算把 ‘–test–’ 充作本人的选项参数来解析:

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

在其他情况下都搜索 ‘vivek’  (即不区分轻重缓急卡塔尔:
grep -i -w vivek /etc/passwd

怎么利用 grep 的“或”相配?

行使如下的语法:

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

或者是

grep 'word1/|word2' 文件名

不区分轻重缓急写地搜索 ‘vivek’ 和 ‘raj’ :
grep -E -i -w 'vivek|raj' /etc/passwd

怎么利用 grep 的“和”相称?

动用上面包车型大巴语法来显示既包蕴 ‘word1′ 又包含 ‘word2′ 的具备行

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

在终极贰个事例中,使用了扩充正则表达式的格局。

哪些使用系列车检查测?

应用如下的语法,您可以检验贰个字符在种类中另行出现次数:

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

要相称字符 “v” 现身四回:

egrep "v{2}" 文件名

上面包车型客车命令能相称到 “col” 和 “cool” :

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

下边包车型地铁吩咐将会相配出至稀少八个 ‘c’ 字符的有着行。

egrep 'c{3,}' 文件名

上边包车型客车例子会相配 91-1234567890(即三个数字-11个数字) 这种格式的手机号。

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

一定检索内容的地点:
 你能够应用 ^ 和 $ 符号压迫四个正则表明式分别相称一行的起头或终止的岗位。上面包车型客车演示呈现以 ‘vivek’ 初叶的文件。
grep ^vivek /etc/passwd

哪些使 grep 命令高亮显示?

应用如下的语法:

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

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

何以仅仅只展现相配出的字符,实际不是同盟出的行?

应用如下语法:

grep -o 正则表达式 文件名

您可以只呈现以 vivek 早先的文本行。举个例子说正是不出示 vivekgite , vivekg 那样单词起始的。
grep -w ^vivek /etc/passwd

正则表达式节制符

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

研究以 ‘foo’ 结尾的文本格式:
grep 'foo$' FILENAME

grep 和 egrep

egrep 等同于 grep -E 。它会以恢宏的正则表明式的情势来解说形式。上边来自 grep 的帮忙页:

基本的正则表明式元字符 ?、 、 {、 |、 ( 和 卡塔尔已经错失了它们原本的含义,要使用的话用反斜线的版本 /?、/ 、/{、/|、/( 和 /卡塔尔国 来顶替。 守旧的 egrep 并不援助 { 元字符,一些 egrep 的贯彻是以 /{ 代替的,所以二个可移植的台本应该制止在 grep -E 使用 { 符号,要相称字面包车型地铁 { 应该运用 [}]。

GNU grep -E 试图协助守旧的用法,借使 { 出在在无效的间隔规范字符串那前,它就能假定 { 不是特殊字符。

比方说,grep -E ‘{1′ 命令寻找满含 {1 八个字符的串,而不会报出正则表明式语法错误。

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

参考:

  • grep 和 regex 扶持手册页(7State of Qatar
  • grep 的 info 页

你还是能够用上边那样的不二等秘书籍寻找空白行:
grep '^$' FILENAME

2、如何合营具体字符?

匹配 ‘Vivek’ 或 ‘vivek’ :
grep '[vV]ivek' FILENAME

抑或可以这么:
grep '[vV][iI][Vv][Ee][kK]' FILENAME

你能够相称数字(举个例子相配 vivek1 或 Vivek2 ):
grep -w '[vV]ivek[0-9]' FILENAME

你能够合作两位数(比方相配 foo11 , foo12 ):
grep 'foo[0-9][0-9]' FILENAME

不光是数字,你能够宽容字母:
grep '[A-Za-z]' FILENAME

展示全数包涵 “w” 或 “n” 字母的文本行:
grep [wn] FILENAME

在括号内的表明式中,在“ [: ”和“ :] ”中所附的字符类的名称:代表归于此类的具备字符的列表。规范字符类名称:
◾[:alnum:] – 字母数字字符。
◾[:alpha:] – 字母顺序
◾[:blank:] – 空格和制表符。
◾[:digit:] – 数字: ‘0 1 2 3 4 5 6 7 8 9’。
◾[:lower:] – 小写字母:‘a b c d e f ‘。
◾[:space:] – 特殊字符:制表符,换行符,垂直制表符、换页,回车,和空间。
◾[:upper:] – 大写字母:‘A B C D E F G H I J K L M N O P Q 福睿斯 S T U V W X Y Z’。

在底下那个例子中,相称全部大写字母:
grep '[:upper:]' FILENAME

3、如何运用通配符?

你可以用 “.” 来代表单个字符。在底下的事例中,查询了装有以字母 “b” 伊始、字母 “t” 结尾的四个字符的单词。
grep '<b.t>' FILENAME

在地点的例证中,
◾< 在单词的伊始地点相配空格字符串
◾> 在单词的结尾相称空格字符串

寻觅并出口全体七个字母的结果:
grep '^..$' FILENAME

寻找并体现全体以 ‘.’ 和数字最早的结果:
grep '^.[0-9]' FILENAME

转义字符’.’
下边包车型大巴正则表明式查找 IP 地址 192.168.1.254 将无法得到预期的结果:
grep '192.168.1.254' /etc/hosts

里头多少个点都亟待被转义:
grep '192.168.1.254' /etc/hosts

以下示例将只极度二个地方:
egrep '[[:digit:]]{1,3}.[[:digit:]]{1,3}.[[:digit:]]{1,3}.[[:digit:]]{1,3}' FILENAME

以下将不分大小写地宽容单词 Linux 或 Unix :
egrep -i '^(linux|unix)' FILENAME

二、深入查究 grep 高档搜索形式

1、如何搜索三个持有以 ‘-‘ 起头的的模式?

接纳 -e 选项寻找全数相配 ‘–test–‘ 的结果。grep 会尝试把 ‘–test–‘ 作为一个取舍剖析:
grep -e '--test--' FILENAME

2、如何在grep中使用 OENCORE 的逻辑运算 ?
grep -E 'word1|word2' FILENAME
### OR ###
egrep 'word1|word2' FILENAME

要么能够如此做
grep 'word1|word2' FILENAME

3、怎么样在grep中动用 AND 的逻辑运算 ?

遵守上面包车型地铁语法呈现全数包蕴了单词 ‘word1′ 和 ‘word2′ 的结果:
grep 'word1' FILENAME | grep 'word2'

抑或可以那样:
grep 'foo.*bar|word3.*word4' FILENAME

4、怎么样测验种类?

您能够利用下边包车型大巴语法测量试验多少个字符在体系中的重复的次数:
{N}
{N,}
{min,max}

非凡满含七个字母 v 的字符串结果:
egrep "v{2}" FILENAME

下边包车型大巴事例中校检索文件内包括 “col” 和 “cool” 的字符串结果:
egrep 'co{1,2}l' FILENAME

上边包车型地铁例证元帅匹配最少含有3个字母 c 的结果:
egrep 'c{3,}' FILENAME

上边包车型大巴亲自去做将相称 “91-1234567890″ 格式的手提式无线电话机号码(即 “两位数字-10位数字”)
grep "[[:digit:]]{2}[ -]欧洲杯竞猜,?[[:digit:]]{10}" FILENAME

5、怎么样使 grep 的出口结果高亮标明?

应用上面例子的语法:
grep --color regex FILENAME

6、如何使 grep 的输出只突显相称的一部分并非整行?

采纳下面例子的语法:
grep -o regex FILENAME

三、正则表明式操作符计算

正则表达式
操作符
                                                  含义
. 匹配任何单个字符。
? 匹配前一个字符0次或1次。
* 匹配前一个字符≥0次。
匹配前一个字符≥1次。
{N} 匹配前一个字符N次。
{N,} 匹配前一个字符≥m次。
{N,M} 匹配前一个字符 N 到 M次。
如果在列表中的某个列表或某个范围内的结束点,表示该范围。
^ 开始标记,表示在开始位置匹配一个空字符串。也表示不在列表的范围内的字符。
$ 结束标记。匹配一个空的字符串。
b 单词锁定符。在一个单词的边缘位置匹配空字符串。
B 在一个单词的非边缘位置匹配空字符串。
< 匹配单词开始的空字符串。
> 匹配单词结尾的空字符串。

四、关于 grep 和 egrep

egrep 即 grep -E ,它把情势作为三个增添的正则表明式解释。grep 扶持文书档案中那样定义:

 In basic regular expressions the meta-characters ?,  , {, |, (, and ) lose their special meaning; instead use the backslashed versions ?,  , {,
       |, (, and ).
       Traditional egrep did not support the { meta-character, and some egrep implementations support { instead, so portable scripts should avoid  {  in
       grep -E patterns and should use [{] to match a literal {.
       GNU grep -E attempts to support traditional usage by assuming that { is not special if it would be the start of an invalid interval specification.
       For example, the command grep -E '{1' searches for the two-character string {1 instead of reporting a syntax  error  in  the  regular  expression.
       POSIX.2 allows this behavior as an extension, but portable scripts should avoid it.
仿效文献:
  • 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/sedState of Qatar 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

编辑:服务器运维 本文来源:命令中的正则表达式精解,六分钟教您轻轻便松

关键词: 欧洲杯竞猜