6-1 9 正則 元字符 grep

9.1 正則表達式和元字符

正則表達式是一種符號表示法,用於識別文本模式。php

元字符mysql

正則表達式的元字符包括如下字符正則表達式

^ $ . [] {} - ? * + () | \sql

「.」 點。匹配任意單個字符shell

「^」和「$」 錨。匹配行的開頭和結尾。例如:grep -i '^..j.r$' /詞典用於填字遊戲express

「[ ]」 方括號。匹配括號內的一個字符。括號內的^表示否認,「-」表示範圍,bash

  • 若是想在shell路徑名擴展中正常使用[A-Z]須要調整POSIX爲傳統export LANG=POSIX

「|」 或。echo "AAA" | grep AAA|BBB|CCC輸出AAA工具

「?」、「*」、「+」、「{}」 限定符。分別表示匹配0或1次、0或屢次、1或屢次、匹配次數.net

9.2 grep

全稱:global regular expression print 全局正則表達式打印(工具)code

語法:grep [options] regex [file...]

例如:grep -i 'dog' txt //中的dog即便正則表達式,不過經過特殊符號能夠讓表達式匹配更多含義

選項:功能描述

  • -i :--ignore-case忽略大小寫
  • -v :-invert-match不匹配。正常狀況下,grep會輸出匹配行,二該選項可以使grep輸出不包含匹配項的全部航
  • -c :--count指定輸出匹配項目數(若是有-v選項,那就輸出不匹配項目的數目)而不是直接輸出匹配行自己
  • -l :--files-with-matches輸出匹配文件名而不是直接輸出匹配行自己
  • -L :--files-without-match輸出不包含匹配項的文件名
  • -n :--line-number在每一個匹配行前面加上該行在文件內的行號
  • -h :--nofilename進行多文件搜索時,抑制文件名輸出
  • -r 遍歷全部子目錄(默認只能看文件)
  • -A 後面跟數字,過濾出符合要求的行以及下面n行
  • -B 同上,過濾出符合要求的行以及上面n行
  • -C 同上,同時過濾出符合要求的行以及上下各n行

grep/egrp示例

  • grep -n 'root' /etc/passwd
  • grep -nv 'nologin' /etc/passwd
  • grep '[0-9]' /etc/inittab
  • grep -v '[0-9]' /etc/inittab

eg.1 基本用法

[root@ax-01 ~]# grep -n 'root' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
[root@ax-01 ~]# grep -nv 'nologin' !$
grep -nv 'nologin' /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
25:mysql:x:1000:1000::/home/mysql:/bin/bash
26:user1:x:1001:1001::/home/user1:/bin/bash
[root@ax-01 ~]# grep '[0-9]' /etc/inittab
# multi-user.target: analogous to runlevel 3
# graphical.target: analogous to runlevel 5
  • grep '^[^a-zA-Z]' test.txt
  • grep '.o' test.txt
  • grep 'ot*' test.txt
  • grep '.*' test.txt

eg.2 特殊符號

[root@ax-01 ~]# cat txt
xxx     Math English C++  Experiment  
Monkey  100   90     95   Good  
Cat     80    100    60   Perfect  
Dog     90    60     70   Great  
Tiger   95    85     90   Fantastic 

@http://blog.csdn.net/stpeace/article/details/46848873
# awk基本用法簡介
2015-07-12 19:49 by stpeace
[root@ax-01 ~]# grep '^[^a-zA-Z]' txt
@http://blog.csdn.net/stpeace/article/details/46848873
# awk基本用法簡介
2015-07-12 19:49 by stpeace
[root@ax-01 ~]# grep '.o' txt
Monkey  100   90     95   Good  
Dog     90    60     70   Great  
@http://blog.csdn.net/stpeace/article/details/46848873
[root@ax-01 ~]# grep 'ot*' txt
Monkey  100   90     95   Good  
Dog     90    60     70   Great
  • grep 'o{2}' /etc/passwd
  • egrep 'o{2}' /etc/passwd
  • egrep 'o+' /etc/passwd
  • egrep 'oo?' /etc/passwd
  • egrep 'root|nologin' /etc/passwd
  • egrep '(oo){2}' /etc/passwd

eg.3 有些特殊符號須要加-E或者用egrep來實現grep預想的效果

[root@ax-01 ~]# grep -E 'o{2}' txt
Monkey  100   90     95   Good
[root@ax-01 ~]# egrep 'o{2}' txt
Monkey  100   90     95   Good
[root@ax-01 ~]# egrep 'o+' txt
Monkey  100   90     95   Good  
Dog     90    60     70   Great
@http://blog.csdn.net/stpeace/article/details/46848873

eg.4 連帶顯示後面-A,前面-B 先後-C

[root@lixiang01 grep]# grep -nA2 'root' passwd
1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/nOloGin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
10:operator:x:11:0:operator:/root:/sbin/nologin
11-games:x:12:100:games:/usr/games:/sbin/nologin
12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin

eg.5 不區分大小寫-i

[root@lixiang01 grep]# grep -inA2 'root' passwd
1:root:x:0:0:root:/root:/bin/bash
2-bin:x:1:1:bin:/bin:/sbin/nOloGin
3-daemon:x:2:2:daemon:/sbin:/sbin/nologin
--
10:operator:x:11:0:operator:/RooT:/sbin/nologin
11-games:x:12:100:games:/usr/games:/sbin/nologin
12-ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
grep -n '[a-zA-Z]' inittab      #輸出含字母的行
grep -nv '[a-zA-Z]' inittab     #輸出不含字母的行
grep -n '^[a-zA-Z]' inittab     #輸出字母爲首的行
grep -n '^[^a-zA-Z]' inittab    #輸出非字母爲首的行
grep -nv '^[^a-zA-Z]' inittab   #輸出字母爲首的行
grep -nv '[^a-zA-Z]' inittab    #輸出不含非字母的行
grep -nv '^[a-zA-Z]' inittab    #輸出非字母爲首的行
[root@lixiang01 grep]# cat -n 111.txt
     1	r rr rrr rrrr
     2	o oo ooo oooo
     3	ro or rr oo
     4	rrr
     5	rro
     6	roo
     7	ror
     8	orr
     9	oor
    10	ooo
    11	rrrr
    12	rrro
    13	rroo
    14	rooo
    15	orrr
    16	oorr
    17	ooor
    18	oooo
    19	roro
    20	oror
    21	roor
    22	orro
    23	rorroorrrooorrrroooorrrrrooooo
  • 中間匹配一個字符
[root@lixiang01 grep]# grep -n 'r.o' 111

image

  • o加任意個o
[root@lixiang01 grep]# grep -n 'oo*' 111

image

  • 通配
[root@lixiang01 grep]# grep -n '.*' 111

image

  • 兩種取消{}特殊含義的用法
[root@lixiang01 grep]# grep -n 'o\{2\}' 111
[root@lixiang01 grep]# egrep -n 'o{2}' 111

image

  • 「+」 表明有oo的同時有n個r n=1,2,3...;
  • ?表明有oo的同時有n個r n=0,1
[root@lixiang01 grep]# egrep -n 'oor+' 111
[root@lixiang01 grep]# egrep -n 'oor?' 111

image image

  • "|"表示或者
[root@lixiang01 grep]# egrep -n 'roo|ror|orr' 111

image

  • 表明oo組合兩次
[root@lixiang01 grep]# egrep '(oo){2}' 111

image

擴展: 把一個目錄下,過濾全部*.php文檔中含有eval的行 grep -r --include="*.php" 'eval' /data/

[root@ax-01 ~]# grep -r --include="*txt" 'Dog' /root/
/root/txt:Dog     90    60     70   Great  
/root/test.txt:Dog
[root@ax-01 ~]# grep 'Dog' /root/*txt
/root/test.txt:Dog
/root/txt:Dog     90    60     70   Great
相關文章
相關標籤/搜索