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到九的其余二个数字,但不能够不有
  • [^]:非括号内字符的单个字符

万用字符

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

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

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

grep(Global Research):依据情势,搜索文本,并将适合格局的文本行显示出来。

一.正则表达式

REGEXP,正则表达式:由一类特殊字符以及文本字符所编写的格局,当中多少字符(元字符)不代表字符字母意义,而表示控制或通配的效应,可由此man regex来查看更详细的音信。
正则表明式有两类,一个是主题正则表达式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:文本字符和正则表明式的元字符组合而成的特出原则

一.字符匹配

.:相称任意单个字符
[ ]:相称钦赐范围内的随机单个字符([.]就是.)
[ ^ ]:相称钦点范围外的随意单个字符
[:alnum:]:字母和数字
[:alpha:]:代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:]:小写字母 [:upper:] 大写字母
[:blank:]:空白字符(空格和制表符)
[:space:]:水平和垂直的空白字符(比[:blank:]含蓄的限制广)
[:cntrl:]:不可打字与印刷的控制字符(退格、删除、警铃…) )
[:digit:]:10进制数字 [:xdigit:] 十陆进制数字
[:graph:]:可打字与印刷的非空白字符
[:print:]:可打字与印刷字符
[:punct:]:标点符号

grep

grep

grep [OPTIONS] PATTERN [FILE…]

2.匹配次数

相称次数是用在要钦点次数的字符前边,用于内定前边的字符要出现的次数。

*:相配前面包车型大巴字符任意次,包蕴0次,贪婪情势:尽只怕长的相当
.*:任意长度的任性字符
\?:相称其眼下的字符0 或1回
\+:相配其前边的字符至少2回
\{n\}grep及正则表达式,正则表明式与grep和sed。:相称后边的字符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列之外,并显示该行之后的情节。
  • -B<彰显行数> 或 –before-context=<显示行数> :
    除了显示符合样式的那一行之外,并呈现该行在此以前的内容。
  • -C<显示行数> 或 –context=<彰显行数>或-<彰显行数>
    : 除了呈现符合样式的那1行之外,并展现该行在此以前后的内容。

       -i:忽略字符大小写

3.地方锚定

岗位锚定是用来固定出现的任务。

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

正则

正则

     
 –color:把相称到的字符用高亮颜色突显出来,因为加上–color用起来会有益于广大,所以用alias给grep取个别称alias
grep=’grep –color’

4.分组

分组:\(\)将2个或多少个字符捆绑在一块,当作一个完完全全进行拍卖,如:\(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地址:

正文永久更新链接地址

澳门金沙国际 1

       -v:展现未有被方式相配到的行

5.恢弘的正则表达式

壮大的正则表明式,顾名思义,就是在正则表明式上的增加,是在元字符相称方面包车型大巴写法简化。
大部的元字符和正则表达式相同,那里把差异的笔录一下:
字符相配:

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

次数相称:

?:0 或1次
+: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不协助正则表明式的选择,也正是选用它时,你能够运用通配符。
举个示例:

澳门金沙国际 2

grep的用法多种两种,大家可以多加尝试!

 

3.sed

sed:Stream EDitor,又名行编辑器。
sed:是壹种流编辑器,它2次拍卖一行内容。处理时,把当下处理的行存款和储蓄在一时缓存区中,称为“形式空间”(patternspace),接着用sed命令处理缓存区中的内容,处理到位后,把缓存区的始末送往荧屏。然后读入下一行,执行下2个循环。倘使没有采纳诸如‘D’的特出命令,那么会在五个循环之间清航空模型式空间,但不会清空保留空间。那样持续重复,直到文件末尾。文件内容并不曾改变,除非您选取重定向存款和储蓄输出。
sed的效力:首要用以自动编辑三个或八个公文,简化对文件的1再操作,编写转换程序等,且支持正则表明式!
行使方法:

sed [OPTION]... {script-only-if-no-other-script} [input-file]...
常用[option]:
-n:不出口情势空间内容到显示器,即不自动打字与印刷
-e:多点编辑,-e sm2 -e sm一
-f /PATH/SCRIPT_FILE:从钦赐的台本文件中,读取出脚本内容,并统①到sed
COMMAND中开始展览实践。通俗的知情为将脚本写在了文件中。
-r:支持使用扩张正则表明式
-i:直接修改源文件。若是在指令中进入了 -i
选项,源文件的始末将会被一直改动掉。
-i[SUFFIX]:这大概-i
选项,那么些选项的情趣是说,若是在运用该采用的历程中钦命了后缀名称,那么该命令在执行的长河中会先将源文件备份成以[SUFFIX]
为后缀的文件,然后对文本实行操作

从利用方法中看出了{script-only-if-no-other-script},这一个代表了在方式空间和保留空间的处理进程,也正是怎么处理的,那里名叫了script。那么这几个script是何等吧?怎么书写呢?上边就来说下有关地点定界、编辑命令、高级编辑命令,这几个正是结合scrip的因素。

地方定界澳门金沙国际 ,:正是注明用来处理壹行中的那些些部分的。

不给地址:对全文进行处理
#:钦点的行/pattern/可以被格局相配到的每一行
#,#:从第n行到第m行
#,+#:从第n行,加上其前边m行
/pat1/,/pat2/:符合第二个格局和第一个模式的具有行
#,/pat1/:从第n行到适合 /pat1/ 这一个方式的行
1~2 :~ 这一个标记表示步进,壹~二 表示的是奇数行
2~2:表示的是偶数行

编写制定命令:地址定界后,对范围内的内容举办相关编辑。

d:删除形式空间非凡的行,并马上启用下壹轮循环
p:打字与印刷当前格局空间内容,追加到默许输出之后
q:读取到钦命行之后退出
a [\]text:在钦命行前边扩展文本扶助使用\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:读取相配到的行的下一行覆盖至格局空间; n>m
N:读取相配到的行的下一行追加至形式空间; 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

澳门金沙国际 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结尾的字符串

\(此处\是用来转义的)?:相配其前边的字符二遍或0次

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

    eg\{1,\}:相配其前边的字符至少壹次

 

岗位锁定:

^:锚定行首,此字符前面的任性内容必须出现在行首

$:锚定行尾,此字符前边的私行内容必须出现在行尾

^$:空白行

\<或\b:锚定词首,其前面包车型客车随机字符必须作为单词首部出现

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

!!!注意:两个\b的效益不相同表现格局为贰个身处锚定词前2个身处锚定词尾

 

分组:

\(\)

    \(ab\)*

   后向引用 

   \1:引用第二个左括号以及与之相应的右括号所包罗的装有内容

   \二:引用第3个左括号以及与之对应的右括号所蕴含的全部内容

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

 

fgrep:不扶助正则表明式,执行进程快

 

 

例子:

grep(Global Research):依据格局,搜索文本,并将符合形式的文本行呈现出来

1、

     澳门金沙国际 4

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

贰、grep –color:把相配到的字符用高亮颜色显示出来

     澳门金沙国际 5

     因为增进–color用起来会便宜广大,所以普通用alias给grep取个外号alias
grep=’grep –color’

     

正则表明式:regular expression,REGEXP

   地方锁定:

     (1)^:锚定行首,此字符后边的即兴内容必须出现在行首

                澳门金沙国际 6

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

              彰显以数字结尾的行

              澳门金沙国际 7

         (3)\>或\b:锚定词尾,其日前的私自字符必须作为单词后面部分出现

              澳门金沙国际 8    

             

 

相关文章