grep与正则表达式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grep与正则表达式相关的知识,希望对你有一定的参考价值。

  第四周

 本周分享一下grep与正则表达式的一些基本用法,通常配合起来在文本文件中搜索一些想要的内容

 文本三剑客之 grep

  grep 强大的文本搜索过滤工具,从文件中搜索特定字符显示打印至终端窗口,另外还支持正则表达式与扩展正则表达式

例子 grep ‘nologin‘ /dev/passwd -m5  
-m 指定匹配次数,匹配N此后停止  
-i 不区分大小写 输入内容的大小写皆匹配出    
-n 显示匹配到行的行号  
-v 取反 输入字符外其他字符皆匹配  
-c 统计匹配到总行数  
-o 仅显示匹配的字符,不会整行显示  
-q 静默模式 匹配到的字符不会输出至终端窗口  
-A1 连带显示匹配行后的1行  
-B2 连带显示匹配行前的2行  
-C3 连带显示匹配行前后各三行  
-e 可跟多个关键字匹配  
-w 仅匹配关键字为单个单词 (数字、字母、下划线组成)  
-f 关键子从文件中匹配  
-E 使用扩展正则表达式 等同于 egrep

  正则表达式

 正则表达式,可以用特定符号代替某一类字符来进行匹配,可以指定匹配的位置、次数 、以及分组替用
 字符匹配:

列子 grep ‘[[:alnum:]]‘ /etc/passwd
 .       匹配任意单个字符  
 [ ]     匹配中括号内任意单个字符        
 [^]        取反  如[^A] 匹配A以外所有字符      
 [:alnum:]  任意字母和数字
 [:lower:]  任意小写字母  
 [:upper:]  任意大写字母 
 [:alpha:]  任意大小写字母 等同于[a-zA-Z]      
 [:blank:]  空白字符  
 [:space:]  空白字符 水平空白符和垂直空白符  
 [:cnatl:]  不可打印控制字符(退格、删除、警铃)  
 [:dinht:]  十进制数字  
 [:xdigit:]  十六进制数字  
 [:graph:] 可打印的非空白字符  
 [:print:] 可打印的字符  
 [:punct:] 标点符号  

  次数匹配:

例子:grep ‘[[:alnum:]]*‘ /etc/passwd  
 *       匹配*号前字符任意次,包括零次  
 .*      匹配任意字符、任意长度  
 \?      匹配零次或一次  
 \3\   匹配3次  
 \1,3\ 匹配前面字符出现最少1次,最多3次  
 \,3\  匹配最多3次  
 \1,\  匹配最少1次    
 另有扩展正则表达式,用法基本与正则表达式一致,扩展正则表达式中的次数匹配中\可直接省略不写 
   位置锚定:  

例子:grep  ‘^[[:alnum:]]‘ /etc/passwd
 ^  行首锚定 一行的最坐侧  
 $  行尾锚定 一行的最右侧  
 ^$ 匹配空行   或^[[:space:]]*$  空行    
 \< 词首锚定  或\b  用在指定字符前  
 \> 词尾锚定  或\b  用在指定字符后  

 分组:

\(\)   将一个或多个字符捆绑在一起,作为一个分组,一个整体  
例子 \(ace\)  ace为一个整体 第一个分组可用\1直接代替,代表ace 
分组可多层套用 : \(string1\(string2\)\)
\1 : string1\(string2\)     
\2 : string2

\|  或  如1\|2 , 匹配1或2  

以上是关于grep与正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

grep用法详解:grep与正则表达式 [转]

正则表达式 与grep

grep与正则表达式

grep与正则表达式

grep命令与正则表达式(过滤)一

grep与正则表达式