正则表明式与grep和sed,grep及正则表明式

By admin in 美高梅手机版4858 on 2019年4月3日

grep及正则表明式

正则表明式(RE居尔ar
EXPression,REGEXP)是对字符串和特殊字符(元字符)操作的一种逻辑公式,使用事先定义好的一对特定字符、及这几个特定字符的结合,组成叁个“规则字符串”,这几个“规则字符串”用来发挥对字符串的一种过滤逻辑。常常被用来检索、替换那1个符合有些格局的文件。

正则表达式又分为宗旨正则表明式(Basic REGEXP)和扩张正则表明式(Extended
REGEXP)。

广阔的用处就是用来比对垃圾邮件。

grep及正则表明式

正则表明式(RE居尔ar
EXPression,REGEXP)是对字符串和特殊字符(元字符)操作的一种逻辑公式,使用事先定义好的有的特定字符、及那个特定字符的构成,组成叁个“规则字符串”,那一个“规则字符串”用来发挥对字符串的1种过滤逻辑。平日被用来检索、替换那几个符合有些形式的文件。

正则表达式又分为大旨正则表达式(Basic REGEXP)和扩展正则表达式(Extended
REGEXP)。

普遍的用处正是用来比对垃圾邮件。

文件查找的供给:grep,egrep,fgrep

目录

壹.正则表明式
2.grep
3.sed

grep和sed必要正则表明式,大家要求注意的正则表达式与通配符用法的分歧。

万用字符

列举部分万用字符,跟正则表明式不通。

  • *:任意长度的人身自由字符
  • ?:任意单个字符
  • []:括号内的单个字符

    • [abcd]:能够是a,b,c,d中任何一个,但不能够不有
    • [0-9]:能够是0到9的其他二个数字,但必须有
  • [^]:非括号内字符的单个字符

万用字符

历数部分万用字符,跟正则表明式不通。

  • *:任意长度的任性字符
  • ?:任意单个字符
  • []:括号内的单个字符

    • [abcd]:能够是a,b,c,d中任何2个,但必须有
    • [0-9]:能够是0到九的其余一个数字,但不可能不有
  • [^]:非括号内字符的单个字符

grep(Global Research):依照情势,搜索文本,并将符合格局的文本行展现出来。

1.正则表明式

REGEXP,正则表达式:由一类特殊字符以及文本字符所编写的格局,当中有个别字符(元字符)不意味字符字母意义,而代表控制或通配的作用,可透过man regex来查阅更详尽的新闻。
正则表达式有两类,1个是主导正则表达式BRE,另三个是扩大的正则表明式ERE。
正则表明式的内燃机:接纳不相同算法,检查处理正则表明式的软件模块PCRE(Perl
Compatible Regular Expressions)
元字符的分类:字符匹配、匹配次数、地方锚定、分组。

正则表明式POSIX字符类

特殊符号 代表意义
[:alnum:] 0-9,a-z,A-Z
[:alpha:] a-z,A-Z
[:digit:] 0-9
[:xdigit:] 任何十六进制数字
[:lower:] a-z
[:upper:] A-Z
[:cntrl:] ASCII控制字符(ASCII 0~31 和 ASCII 127)
[:print:] 任何可打印字符
[:punct:] 标点符号
[:blank:] 空格或制表符([\t ])
[:graph:] 除空白字符外的其他字符
[:space:] 任何空白字符,包括空格([\f\n\r\t\v ])

正则表明式POSIX字符类

特殊符号 代表意义
[:alnum:] 0-9,a-z,A-Z
[:alpha:] a-z,A-Z
[:digit:] 0-9
[:xdigit:] 任何十六进制数字
[:lower:] a-z
[:upper:] A-Z
[:cntrl:] ASCII控制字符(ASCII 0~31 和 ASCII 127)
[:print:] 任何可打印字符
[:punct:] 标点符号
[:blank:] 空格或制表符([\t ])
[:graph:] 除空白字符外的其他字符
[:space:] 任何空白字符,包括空格([\f\n\r\t\v ])

Pattern:文本字符和正则表明式的元字符组合而成的万分原则

1.字符匹配

.:匹配任意单个字符
[ ]:匹配钦点范围内的轻易单个字符([.]就是.)
[ ^ ]:匹配钦命范围外的即兴单个字符
[:alnum:]:字母和数字
[:alpha:]:代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:]:小写字母 [:upper:] 大写字母
[:blank:]:空白字符(空格和制表符)
[:space:]:水平和垂直的空白字符(比[:blank:]带有的界定广)
[:cntrl:]:不可打印的控制字符(退格、删除、警铃…) )
[:digit:]:十进制数字 [:xdigit:] 十6进制数字
[:graph:]:可打字与印刷的非空白字符
[:print:]:可打字与印刷字符
[:punct:]:标点符号

grep

grep

grep [OPTIONS] PATTERN [FILE…]

二.匹配次数

匹配次数是用在要内定次数的字符前面,用于钦赐后面包车型客车字符要出现的次数。

*:匹配前面包车型客车字符任意次,包含0次,贪婪形式:尽大概长的卓殊
.*:任意长度的即兴字符
\?:匹配其前面的字符0 或三次
\+:匹配其眼下的字符至少壹回
\{n\}:匹配后面包车型大巴字符n次 次
\{m,n\}:匹配后面包车型地铁字符至少m 次,至多n次 次
\{,n\}:匹配后面包车型客车字符至多n次
\{n,\}:匹配前面包车型地铁字符至少n次

grep [OPTIONS] PATTERN [FILE…]

  • -i 忽略字符大小写的异样
  • -v:突显未有被形式匹配到的行
  • -o:只呈现被方式匹配到的字符串
  • -E:使用扩充正则表达式 egrep
  • -A<突显行数> 或 –after-context=<突显行数> :
    除了展示符合范本样式的那1列之外,并展示该行之后的剧情。
  • -B<呈现行数> 或 –before-context=<显示行数> :
    除了浮现符合样式的那一行之外,并展现该行在此之前的内容。
  • -C<展现行数> 或 –context=<突显行数>或-<展现行数>
    : 除了展现符合样式的那1行之外,并呈现该行从前后的剧情。

grep [OPTIONS] PATTERN [FILE…]

  • -i 忽略字符大小写的差距
  • -v:显示未有被情势匹配到的行
  • -o:只呈现被格局匹配到的字符串
  • -E:使用扩张正则表达式 egrep
  • -A<展现行数> 或 –after-context=<呈现行数> :
    除了体现符合范本样式的那1列之外,并出示该行之后的内容。
  • 正则表明式与grep和sed,grep及正则表明式。-B<展现行数> 或 –before-context=<呈现行数> :
    除了呈现符合样式的那1行之外,并出示该行之前的内容。
  • -C<彰显行数> 或 –context=<突显行数>或-<展现行数>
    : 除了展示符合样式的那一行之外,并出示该行以前后的内容。

       -i:忽略字符大小写

三.岗位锚定

职位锚定是用于固定出现的职位。

^:行首锚定,用于格局的最左侧
$:行尾锚定,用于情势的最左边
^PATTERN$:用于形式匹配整行
^$:空行
^[[:space:]]*$:空白行
\< 或 \b:词首锚定,用于单词方式的左侧
\> 或 \b:词尾锚定;用于单词方式的左边
\<PATTERN\>:匹配整个单词

正则

正则

     
 –color:把匹配到的字符用高亮颜色展现出来,因为增加–color用起来会便宜广大,所以用alias给grep取个别称alias
grep=’grep –color’

4.分组

分组:\(\)将一个或多少个字符捆绑在协同,当作一个完全举办处理,如:\(root\)\+。分组括号中的情势匹配到的剧情会被正则表明式引擎记录于当中的变量中,这几个变量的命超级模特式为:\1, \2, \3, ...\1意味着从左边起率先个左括号以及与之匹配右括号之间的方式所匹配到的字符。
示例\(string1\+\(string2\)*\);\1 :string1\+\(string2\)*;\2 :string2
后向引用:引用前边的分组括号中的格局所匹配字符 , 而非形式本人。
\|:或者
示例a\|b:a 或b;C\|cat: C 或cat ;\(C\|c\)at:Cat 或cat

元字符

贪婪模式
.:匹配任意单个字符
*:匹配其前面的字符任意次
.*:匹配任意长度的任意字符
\?:匹配其前面的字符1次或0次
\{m,n\}:匹配其前面的字符至少m次

位置锚定
^:锚定行首,此字符后面的任意内容必须出现在行首
$:锚定行尾,此字符前面的任意内容必须出现在行尾
^$:空白行

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

分组:\(\)
后向引用
\1:引用第一个左括号以及与之对应的右括号所包括的所有内容

或者
|:or

元字符

贪婪模式
.:匹配任意单个字符
*:匹配其前面的字符任意次
.*:匹配任意长度的任意字符
\?:匹配其前面的字符1次或0次
\{m,n\}:匹配其前面的字符至少m次

位置锚定
^:锚定行首,此字符后面的任意内容必须出现在行首
$:锚定行尾,此字符前面的任意内容必须出现在行尾
^$:空白行

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

分组:\(\)
后向引用
\1:引用第一个左括号以及与之对应的右括号所包括的所有内容

或者
|:or

Linux公社的RSS地址:

正文永久更新链接地址

美高梅手机版4858 1

       -v:呈现没有被方式匹配到的行

伍.增加的正则表明式

推而广之的正则表明式,顾名思义,就是在正则表达式上的扩展,是在元字符匹配方面包车型客车写法简化。
超过11分之5的元字符和正则表明式相同,那里把不一致的记录一下:
字符匹配:

[ ]:钦定范围内的字符。

次数匹配:

?:0 或1次
+:一 次或频仍
{m}:匹配m次
{m,n}:至少m ,至多n次

分组:
() 将五个或三个字符捆绑在同步,当作二个完完全全进行拍卖。
|:或者
示例:a|b:a 或b;C|cat:C 或cat;(C|c)at:Cat 或cat

上述就是自家所驾驭的正则表达式内容了,大概持有遗漏,我们能够因而man帮助补足,上边大家看进入正题,也便是运用上了。

       -o:只呈现被形式匹配到的字符串

2.grep

grep:Global search REgrular expression and Print out the line
grep
的成效:文本搜索工具,依照用户钦点的“方式”对目的文本逐行实行匹配检查,并打字与印刷匹配到的行。
grep的方式:由正则表明式字符及其文本字符所编写的过滤条件。
grep的用法:

grep [OPTION]… PATTERN [FILE]…
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE…]
常用的[option]:
--color=auto:对郎才女貌到的文书着色呈现
-v:展现不被pattern 匹配到的行,反向选用
-i:忽略字符大小写
-n:显示匹配的行号
-c:总括匹配的行数
-o:仅显示匹配到的字符串
-q:静默形式,不出口任何消息
-A #:after,后#行 ,突显包罗那行后续#行
-B #:before,前#行
-C #:context,前后各#行
-e:完毕多少个选用间的成逻辑or关系,grep –e ‘cat ’ -e ‘dog’ file
-w:匹配整个单词,(字母,数字,下划线不算单词边界)
-E:使用ERE
-F:也正是fgrep ,不辅助正则表明式
-l <范本样式>:列出文件内容符合钦定的范本样式的文件名称。
-h <范本样式>:在展现符合范本样式的那1列在此之前,不标示该列所属的文件名称。
-H <范本样式>:在突显符合范本样式的那一列以前,标示该列的文件名称。
-e <范本样式>:钦定字符串作为查找文件内容的样书样式。

上述选项中有个-E选项,那么些正是足以支撑选拔扩张的正则表明式,当然这么些选项有另个写法:grep -E == egrep
还有个-F选项,这一个用法是一定于fgrep的,即grep -F==fgrep不协理正则表明式的使用,也正是选择它时,你可以应用通配符。
举个示例:

美高梅手机版4858 2

grep的用法多样三种,大家能够多加尝试!

 

3.sed

sed:Stream EDitor,又名行编辑器。
sed:是1种流编辑器,它二遍拍卖一行内容。处理时,把当前处理的行存款和储蓄在一时半刻缓存区中,称为“格局空间”(patternspace),接着用sed命令处理缓存区中的内容,处理达成后,把缓存区的剧情送往荧屏。然后读入下一行,执行下三个巡回。倘使没有选用诸如‘D’的特殊命令,那么会在七个巡回之间清航空模型式空间,但不会清空保留空间。那样不断重复,直到文件末尾。文件内容并未改动,除非您利用重定向存款和储蓄输出。
sed的意义:重要用于自动编辑一个或四个文本,简化对文件的往往操作,编写转换程序等,且辅助正则表明式!
应用办法:

sed [OPTION]... {script-only-if-no-other-script} [input-file]...
常用[option]:
-n:不出口形式空间内容到显示屏,即不活动打字与印刷
-e:多点编辑,-e sm二 -e sm一
-f /PATH/SCRIPT_FILE:从钦点的台本文件中,读取出脚本内容,并统1到sed
COMMAND中开始展览实践。通俗的知晓为将脚本写在了文件中。
-r:援救使用扩充正则表明式
-i:直接修改源文件。若是在指令中参预了 -i
选项,源文件的内容将会被一贯改动掉。
-i[SUFFIX]:那依旧-i
选项,这些选项的意思是说,借使在使用该接纳的进程中钦定了后缀名称,那么该命令在推行的经过中会先将源文件备份成以[SUFFIX]
为后缀的文书,然后对文本举行操作

从利用办法中见到了{script-only-if-no-other-script},那一个代表了在格局空间和保留空间的处理进度,也正是怎么处理的,那里名称为了script。那么那些script是如何吧?怎么书写呢?上边就来说下有关地点定界、编辑命令、高级编辑命令,那么些正是结合scrip的要素。

地方定界:正是注脚用来处理1行中的那四个些部分的。

不给地址:对全文进行处理
#:钦命的行/pattern/能够被情势匹配到的每1行
#,#:从第n行到第m行
#,+#:从第n行,加上其前边m行
/pat1/,/pat2/:符合第2个形式和第二个情势的持有行
#,/pat1/:从第n行到适合 /pat1/ 那个形式的行
1~2 :~ 这么些标记表示步进,一~贰 表示的是奇数行
2~2:表示的是偶数行

编辑命令:地址定界后,对范围内的剧情开始展览有关编辑。

d:删除情势空间相当的行,并立时启用下1轮循环
p:打字与印刷当前情势空间内容,追加到默许输出之后
q:读取到内定行之后退出
a [\]text:在钦定行后边扩展文本辅助使用\美高梅手机版4858,n 完结多行行后扩展
i [\]text:在行后边插入文本
c [\]text:替换行为单行或多行文本
w /path/somefile:保存格局匹配的行至钦点文件
r /path/somefile:读取钦赐文件的文件至情势空间中分外到的行后
=:为方式空间中的行打字与印刷行号
!:形式空间中匹配行取反处理
s///:查找替换, 扶助选择其余分隔符,s@@@ ,s###
:对壹行进行反复操作的命令的细分
&:合营s///使用,代表后面所查找到的字符等,&sm ;sm&。
g:行内全局替换。也能够钦定行内的第多少个符合须求的开始展览替换:二g,就代表第贰个替换。
p:呈现替换来功的行
w /PATH/TO/SOMEFILE:将替换来功的行保存至文件中

高等编辑命令:也是对定界范围内的情节开始展览处理了,可是是拍卖起来特别高档。

P:打字与印刷格局空间开始至\n 内容,并追加到默许输出在此以前
h:把情势空间中的内容覆盖至保持空间中;m > b
H:把方式空间中的内容充实至保持空间中; m>>b
g:从维系空间取出数据覆盖至情势空间; b>m
G:从维系空间取出内容充实至方式空间; b>>m
x:把形式空间中的内容与保障空间中的内容展开调换; m <->b
n:读取匹配到的行的下1行覆盖至情势空间; n>m
N:读取匹配到的行的下1行追加至情势空间; n>>m
d:删除格局空间中的行; delete m
D:假使格局空间蕴涵换行符,则删除直到第贰个换行符的格局空间中的文本,并不会读取新的
输入行,而选用合成的方式空间重新起动循环。借使方式空间不分包换行符,则会像发出d
命令那样运转经常的新循环

望着有点有,那里写多少个用法示例:

sed ‘2p’ /etc/passwd
sed –n ‘2p’ /etc/passwd
sed –n ‘1,4p’ /etc/passwd
sed –n ‘/root/p’ /etc/passwd
sed –n ‘2,/root/p’ /etc/passwd
sed -n ‘/^$/=’ file
sed –n –e ‘/^$/p’ –e ‘/^$/=’ file
sed ‘/root/a\superman’ /etc/passwd
sed ‘/root/i\superman’ /etc/passwd
sed ‘/root/c\superman’ /etc/passwd
sed ‘/^$/d’ file
sed ‘1,10d’ file
nl /etc/passwd | sed ‘2,5d’
nl /etc/passwd | sed ‘2a tea’
sed 's/test/mytest/g' example
sed –n ‘s/root/&superman/p’ /etc/passwd
sed –n ‘s/root/superman&/p’ /etc/passwd
sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets
sed –i.bak ‘s/dog/cat/g’ pets
sed -n 'n;p' FILE
sed '1!G;h;$!d' FILE
sed 'N;D‘ FILE
sed '$!N;$!D' FILE
sed '$!d' FILE
sed ‘G’ FILE
sed ‘g’ FILE
sed ‘/^$/d;G’ FILE
sed 'n;d' FILE
sed -n '1!G;h;$p' FILE

上边那些示例咱们能够都尝试下,多尝试就知道怎样意思了!
上述全部内容正是自身所知晓的关于grep和sed以及协作正则表达式的用法了,它们成效很强劲,能处理绝半数以上的文本、文件难点。若上述有那么些非不奇怪的地点,欢迎提议,感谢!

本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147269.htm

美高梅手机版4858 3

正则表明式:regular expression,REGEXP

正则表平常被用来寻找、替换那一个符合某些情势(规则)的文件。

元字符:

.:匹配任意单个字符

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

[^]:匹配钦点范围外的随意单个字符

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

 

同盟次数(贪婪情势,即尽恐怕长的去匹配):

*:匹配其前方的字符任意次

        eg那个个字符串里a,b,ab,aab,acb,adb,amnb哪个能满意a*b

            b:b前面的a出现0次

            aab:b前面的a出现2次

.*:任意长度的任性字符

     eg:a.*b:以a起头b结尾的字符串

\(此处\是用来转义的)?:匹配其前面的字符3次或0次

\{m,n\}:匹配其前方的字符至少m次,至多n次

    eg\{1,\}:匹配其前边的字符至少三遍

 

岗位锁定:

^:锚定行首,此字符前边的私下内容必须出现在行首

$:锚定行尾,此字符前面包车型大巴妄动内容必须出未来行尾

^$:空白行

\<或\b:锚定词首,其前边的随意字符必须作为单词首部出现

\>或\b:锚定词尾,其前方的轻易字符必须作为单词后面部分出现

!!!注意:两个\b的效能不同表现方式为3个坐落锚定词前三个坐落锚定词尾

 

分组:

\(\)

    \(ab\)*

   后向引用 

   \1:引用第三个左括号以及与之相应的右括号所包含的全体剧情

   \2:引用第三个左括号以及与之对应的右括号所包涵的具备内容

   \3:引用第1个左括号以及与之对应的右括号所包涵的装有内容

 

fgrep:不帮助正则表达式,执行进程快

 

 

例子:

grep(Global Research):根据格局,搜索文本,并将符合情势的文本行展现出来

1、

     美高梅手机版4858 4

    查找/etc/passwd中有root的行并展现出来

二、grep –color:把匹配到的字符用高亮颜色展现出来

     美高梅手机版4858 5

     因为增进–color用起来会有益于广大,所以壹般用alias给grep取个别称alias
grep=’grep –color’

     

正则表达式:regular expression,REGEXP

   地点锁定:

     (1)^:锚定行首,此字符前边的随机内容必须出今后行首

                美高梅手机版4858 6

      (二)$:锚定行尾,此字符后边的任性内容必须出现在行尾

              展现以数字结尾的行

              美高梅手机版4858 7

         (3)\>或\b:锚定词尾,其前方的妄动字符必须作为单词尾巴部分出现

              美高梅手机版4858 8    

             

 

发表评论

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

网站地图xml地图
Copyright @ 2010-2019 美高梅手机版4858 版权所有