正则表达式和grep的介绍及使用

                         

        在linux上用来处理文本信息最好的工具莫过于使用grep,sed和awk这三种工具了。可是如今咱们来介绍正则表达式和grep命令,及用法。
linux

grep, egrep, fgrep:文本过滤工具(模式:pattern)工具; 
grep:基本正则表达式,-E,-F 
egrep:扩展正则表达式, -G,-F 
fgrep:不支持正则表达式, 
git


Regular Expression ,REGEXP 正则表达式

        正则表达式用来在文件中匹配符合条件的字符串,正则是贪婪匹配(凡有的一行都列出)。grep,awk,sed等命令能够支持正则表达式。通配符用来在系统中匹配符合条件的文件名,通配符是彻底匹配(只列有的)。ls find cp命令不支持正则表达式。 
\ 转义符,后面的字符被grep使用。表明取消特殊符号的含义取消。(使符号的图书含义取消,后面的符号变为纯字符)。正则表达式

基本正则BRE

字符匹配

.  匹配除换行外的任意一个字符.
[]中括号中的一个字符.  []匹配括号中任意一个字符. 例如[abcd][12345],任意[a-d][1-4]中的任意. 
[^] 括号内除外.
字符集:[:digit:]数字、[:lower:]小写、[:upper:]大写、[:alpha:]字母、[:alnum:]字母数字、[:punct:]标点、[:space:]空格 [][xdigit]16进制

示例:express

wKiom1bi0H7QQEFJAABKYDfIV3E217.jpg

wKioL1bi0Qmykue6AAA8YYPyeV8129.jpg

wKiom1bi0I_wAesoAABBPvRZuAc170.jpg

wKioL1bi0RySjciMAAAu6sjV2Ss801.jpg

wKiom1bi0JvR-B06AAA9Ep7ueqc027.jpg


次数匹配:

用于要指定其出现的次数的字符后面,用来限制前面的字符要出现的次数。默认工做在贪婪模式下。 
正则也会统计空格数,可是一个tab和一个space都被认为一个空格。ide

*       前一个字符匹配0次或任意次;  .*表任意长度的任意字符;
\?     任意字符重复1次,或0次, 即其前面的字符是无关紧要的;
\+:    匹配其前面的字符1次或屡次,即其前面的字符要出现至少1次。由于+有特殊意思,因此要转义;
\{0,m\} 前面的字符至多m次;
\{n,m\} 前面的字符至少出现n次,最多出现m次;例如[a-z]\{6,8\}匹配6-8位的小写字母;
\{n\}   表明前面的字符刚好出现几回.例如[0-9]\{4\}匹配四位数字,[1][3-8][0-9]\{9\}匹配手机号码;
\{n,\}  前面的数字出现很多于n次.[0-9]\{2,\}表示两位以上的数字;

示例:工具

wKiom1bi1PvjNqF6AABJAyFDbOc117.jpg

wKioL1bi1YWjUEKXAAAyqS8Bg3c902.jpg

wKiom1bi1QXjXU1fAAAx01PIJlM248.jpg

wKioL1bi1hXC_60vAABmxg-ZA78416.jpg

wKioL1bi1lSRKTqBAAA2O_5MmkM382.jpg

wKiom1bi1hqDUxWgAAAxFF-OLSI538.jpg

wKiom1bi1jvzsUviAABKgHWO704054.jpg




锚定位置:

标定出现的位置ui

^匹配行首.
例如:   ^hello   任意一hello开头的行;
$匹配行尾.
例如:   hello$  任意一hello结尾的行;
^PATTERN$  用于PATTERN来匹配整行;    
 例如: ^$  匹配空白行;
 例如: ^[[:space:]]*$  空行或包含空白字符的行;

组成的连续字符(字符串)都称为单词;spa

\< 或 \b   后面的字符必须作为单词首部出现,\<PATTERN,\bPATTERN;
\> 或 \b   后面出现的任意字符必须以单词的尾部出现.PATTERN\>,PATTERN\b;
\<root\>   \broot\b 以root做为整个单词出现的,独立出现。

示例:code

wKioL1bi18LitZ3UAAA4EIKxeH8694.jpg

wKiom1bi10HwC1xIAAAwZWoxcUU707.jpg

wKioL1bi18nRZwiyAAAs0Uy6ETc707.jpg

wKiom1bi10bxW6dLAAAz9O38huI462.jpg




内容分组及引用:

前面匹配到的后面也原封不动的匹配。至关于匹配两个如出一辙的。也叫后向引用。 
后向引用:引用前面的分组括号中的模式所匹配到的字符;regexp

\(PATTERN\) 将一个或多个字符捆绑在一块儿,看成一个总体进行处理; 
\(ab\)*  ab出现零次或任意次
Note:分组括号中的模式匹配 到的内容会被正则表达式引擎自动记录于内部的变量中,这些变量为:
    \1:模式从左侧起,第一个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
    \2:模式从左侧起,第二个左括号以及与之匹配的右括号之间的模式所匹配到的字符;
    \n:模式中第n个左括号以及与之匹配的右括号之间的模式所匹配的字符串;
    ...

grep "\(l..e\).*\1" lovers.txt 出现l..e,中间任意填充,后面又出现l..e且先后的l..e相同。

例如:

wKioL1bi2Hbz2p-rAAA1dVJZKus676.jpg


扩展正则表达式:egrep ERE

grep -E 或 egrep [OPTIONS] PATTERN [FILE…] 
扩展正则表达式的元字符:

字符匹配:

.  任意单个字符
[]  指定范围内的任意单个字符
[^]  指定范围外的任意单个字符


次数匹配:

*        *前面的字符任意次,0,1或屡次;
?        ?前面的字符0次或1次,其前的字符是无关紧要的;
+        +前面的字符其前字符至少1次;
{m}      {m}其前的字符m次;
{m,n}    {m,n}前面的字符至少m次,至多n次; 
{0,n}    {0,n}前面的字符至多出现n次,至少0次。
{m,}      {m,}前面的字符前面的字符至少出现m次。

位置锚定

^:行首锚定;
$:行尾锚定;
\<, \b:词首锚定;
\>, \b:词尾锚定;

分组及引用:

   (PATTERN):分组;括号内的模式匹配到的字符会被记录于正则表达式引擎的内部变量中;

提供后向引用:\1, \2, ...

或者:

a|b:a或者b;
C|cat:C或cat,整个左侧或右侧
(c|C)at:cat或Cat
a|bc:匹配a或bc ,或者指整个左边或右边

例如:

wKiom1bi2d-zIdwpAABCWSbP9IU015.jpg

wKioL1bi2mqhTk1nAABASVinfB0383.jpg

fgrep–fast grep

不支持正则表达式,不须要正则时效果好。 


grep: Global search REgular expression and Print out the line.

做用:文本搜索工具,根据用户指定的“模式(过滤条件)”对目标文本逐行进行匹配检查;打印匹配到的行,默认支持的是基本正则表达式; 
模式:由正则表达式的元字符及文本字符所编写出的过滤条件,须要加引号;

下面是grep的一些经常使用选项。

grep [options] PATTERN [FILE...] 
grep  [OPTIONS]  [-e PATTERN | -f FILE]  [FILE...]
    --color   把搜到的关键字颜色表示;
    --color==auto  搜索出的关键字用颜色表示高亮显示;    
    -i  ignorecase 忽略大小写;
    -v,--invart-match  显示没有被模式匹配的行;
    -o 只显示模式匹配的字符串自己;
    -q ,--quiet,--silent:静默模式,即不输出任何信息;
    -d   可查目录下的文件名,默认查的是文本;
    -n 输出行号;   
    -E , --extended-regexp  支持使用扩展正则表达式元字符(grep使用基本正则表达式 ); 
    -F    不使用正则表达式。  
    -G   使用基本正则。   
    -P --perl-regexp  支持pcre ,perl的正则。
    -e 多模式机制;  
    -f FILE,--filefile:每行包含了一个pattern的文本文件,即gerp script;
    -A #   当grub匹配到,显示后#行   
    -B #    同上显示前面的#行  
     -C #    显示先后#行

完!

相关文章
相关标签/搜索