grep命令 | 正则表达式

date -s “2018-4-7”

1、grep,Global search REgular expression and Print out the line 
   作用:文本搜索工具,根据用户指定的“模式”对目标文本逐行进行匹配检查;打印匹配到的行 
   模式:由正则表达式字符及文本字符所编写的过滤条件
  grep [OPTIONS] PATTERN [FILE...]
常用选项:
 --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,不支持正则表达式
---->head -5 /etc/passwd |grep "root" --color=auto
M7UD(8A)CPWB)E[K0BL}}WM
Centos7版本默认支持--color=auto,centos6默认不支持,原理是在家目录下。bashrc文件中加入
---->alias grep="grep --color=auto"
KY{2HYT69_EJ@R9K~{LO~E4
---->head -5 /etc/passwd |grep -v "root"
6P]${_$7A(DJY_JSD[M(0YG 
---->grep -i "home" /etc/default/useradd 
$U2)UVYE[J41_N$9)G@7VQI
---->grep -n "init" /etc/init.d/functions
LZH)1ZF4F6BT_LM0A1VB`_H
---->grep -c "default" /etc/fstab 
IIO@_S]F%G_L3$MEZM3]J6M
---->ls /etc/* |grep -o "network"
V6JS6~~QB}_KUAO}`9TN
---->lsof |grep -B4 "pipe"
MIC{7`K[5JS$]UX8G9K9L[N
---->grep -A3 -i "ceate" /etc/login.defs
IAL24F9X`6G)I[EX]$%L
注:grep匹配计算行数,空行也算为一行
2、正则表达式, REGEXP
    由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
 程序支持:grep,sed,awk,vim, less,nginx,varnish等 
 分两类: 
   基本正则表达式:BRE 
   扩展正则表达式:ERE 
   grep -E, egrep 
 正则表达式引擎: 
   采用不同算法,检查处理正则表达式的软件模块 PCRE(Perl Compatible Regular Expressions) 
 元字符分类:字符匹配、匹配次数、位置锚定、分组 
 man 7 regex 
2.1基本正则表达式元字符 
字符匹配: 
 . 匹配任意单个字符 
 [] 匹配指定范围内的任意单个字符 
 [^] 匹配指定范围外的任意单个字符 
 [:alnum:] 字母和数字 
 [:alpha:] 代表任何英文大小写字符,亦即 A-Z, a-z 
 [:lower:] 小写字母 [:upper:] 大写字母 
 [:blank:] 空白字符(空格和制表符) 
 [:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广) 
 [:cntrl:] 不可打印的控制字符(退格、删除、警铃...) 
 [:digit:] 十进制数字 [:xdigit:]十六进制数字 
 [:graph:] 可打印的非空白字符 
 [:print:] 可打印字符 
 [:punct:] 标点符号 
2.2匹配次数:用在要指定次数的字符后面,用于指定前面的字符要出现的次数 
  * 匹配前面的字符任意次,包括0次----->贪婪模式:尽可能长的匹配 
 .* 任意长度的任意字符 
 \? 匹配其前面的字符0或1次 
 \+ 匹配其前面的字符至少1次 
 \{n\} 匹配前面的字符n次 
 \{m,n\} 匹配前面的字符至少m次,至多n次 
 \{,n\} 匹配前面的字符至多n次 
 \{n,\} 匹配前面的字符至少n次 
2.3 位置锚定:定位出现的位置 
 ^ 行首锚定,用于模式的最左侧 
 $ 行尾锚定,用于模式的最右侧 
 ^PATTERN$ 用于模式匹配整行 
 ^$ 空行 
 ^[[:space:]]*$ 空白行 
 \< 或 \b 词首锚定,用于单词模式的左侧 
 \> 或 \b 词尾锚定;用于单词模式的右侧 
 \<PATTERN\> 匹配整个单词 
2.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 
2.5 egrep及扩展的正则表达式   egrep = grep -E 
egrep [OPTIONS] PATTERN [FILE...] 
2.5.1扩展正则表达式的元字符: 
字符匹配: 
 . 任意单个字符 
 [] 指定范围的字符 
 [^] 不在指定范围的字符 
2.5.2次数匹配: 
 *:匹配前面字符任意次 
 ?: 0或1次 
 +:1次或多次 
 {m}:匹配m次 
 {m,n}:至少m,至多n次 
2.5.3位置锚定: 
 ^ :行首 
 $ :行尾 
 \<, \b :语首 
 \>, \b :语尾 
2.5.4分组: 
 () ,后向引用:\1, \2, ... 
2.5.5或者: 
 a|b: a或b 
 C|cat: C或cat 
 (C|c)at:Cat或cat 
 

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/95101

(1)
parrotparrot
上一篇 2018-04-07
下一篇 2018-04-07

相关推荐