|
|
楼主 |
发表于 2019-6-2 02:04:49
|
显示全部楼层
正文之:grep的详细介绍
' d* |( }% I6 D; h% D& B6 L grep和egrep是现在感觉比较难的一部分,主要是符号多,看得眼花了乱。# [1 H' H! z1 e I" c' U
k/ a) [7 ] N3 j. ? grep(global search regular expression and prind out the line)全称就叫全面搜索正则表达式 并打印行出来,简单来说就是文本搜索工具,根据用户指定的文本搜索模式对目标文本进行搜索,显示能够所匹配的行,当然,也可以把grep看也是一个文本过 虑器。8 ^) j% H- x, Y! u
" _5 i$ m+ @& i
格式:grep [options]... 'PATTERD模式' file....
6 k9 B+ o: F- ?/ s% M1 y M8 a8 l: b6 R 模式:就是一个最基本的字符串 # X7 I |3 F# X8 s$ u( f5 x' |
如:grep –A 1 '[r][[:punct:]]*[t]' /etc/passwd ''里的内容就是模式8 c0 C; T( b; \
! q( Q& k: S. P$ V* X- N" O3 Tgrep的常用选项:
/ P; ~. H; A; f8 @% W -v:反向匹配、显示不能别模式匹配到的行;
9 |* V& q+ m( X 例:取出/etc/fstab不包含#号的行4 h/ f* C2 p- K3 R0 L: A- y# r
gerp –v "#" /etc/fstab
! V! w2 W, {* b9 f; L, S* W7 [2 |4 \) w) A0 w1 s: C% F
1
. X4 f+ l8 G" l4 h23 ]: s: M; z/ L3 y( r( i5 C
3
: z0 J6 H( U4 k) o* o# I7 k4
& U9 f9 K( S7 X6 x+ p7 @' N& b56 _/ v: b% H1 A8 G
6
- X" [, x6 M2 B' X! @* h: j7 b$ R p7* p U ^; H0 _: L0 |
8
: b1 Y+ u# ?# o$ K+ g9 O& d' s3 k, o8 ^
10
- J' f0 z# P& S- b11
. x" `. `9 {5 ?9 Q$ Q12
1 n, x* p" ]; R) g1 Y13! p5 q5 k6 B0 q! {7 C) Z
14- u3 W5 J; V* `6 q
15' d% G9 G* g p; Z, F! |
16
5 r5 y6 ?$ @3 @4 M- D17/ X7 i, v ~! p3 b
18
: h% [3 j* y) L% A) q197 h! Y J O6 O# K
20- ]; ?; ^! f' ?5 W
215 w+ v3 h% e- j$ G* |
22
F0 F, I! v0 A233 P) b" h5 d8 Z# j- v) ?
24
0 t8 |7 S& C! l9 |8 w' k6 C25
8 ]! j4 I: S: a# Z267 l( w- U/ D7 P$ l# W
27* j2 }8 k' ~2 k$ S* c+ [) f
[root@localhost xiao]# cat /etc/fstab; i/ R/ m( D- V) d' C1 v
#. u9 |0 ~# c7 M2 G( A; Z- Y
# /etc/fstab
+ h* v: v) W- ^4 }. g# Created by anaconda on Mon Feb 10 10:38:04 2014/ J$ R; L( e7 g1 {
## a5 M; V; S$ l# n8 _6 t
# Accessible filesystems, by reference, are maintained under '/dev/disk'
/ y/ p+ i: P8 J! O# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
: v: {. u3 T1 m' Q5 Q9 O s#
6 h; B3 I# E' o- b% l/dev/mapper/vg0-root / ext4 defaults 1 1
* q4 ]6 Q6 e! ^! qUUID=99e81364-46cb-4795-974a-6cc0ab91a46f /boot ext4 defaults 1 24 u/ B' n9 ]5 y( @, n& i
/dev/mapper/vg0-usr /usr ext4 defaults 1 2
; j, H4 {. | v- g7 q/ N- ^/dev/mapper/vg0-var /var ext4 defaults 1 21 q+ p9 t' s+ I d, d
/dev/mapper/vg0-swap swap swap defaults 0 0; X. A" r, ?1 F1 v8 K8 t
tmpfs /dev/shm tmpfs defaults 0 0- u/ I- A7 j- _
devpts /dev/pts devpts gid=5,mode=620 0 0
! B3 ]) x/ n% h$ esysfs /sys sysfs defaults 0 0( u0 x8 Z1 X0 O% I# s( _, Y
proc /proc proc defaults 0 00 X) J9 F/ R# b
[root@localhost xiao]# grep -v "#" /etc/fstab
) a" [9 h' v" C+ p/dev/mapper/vg0-root / ext4 defaults 1 1& Z2 P3 }0 b: q. H! u, n
UUID=99e81364-46cb-4795-974a-6cc0ab91a46f /boot ext4 defaults 1 2" p8 V/ T- t, f/ F- C: i& i
/dev/mapper/vg0-usr /usr ext4 defaults 1 2
* L% |4 _" l9 v( a, N8 N/dev/mapper/vg0-var /var ext4 defaults 1 2
' N2 w0 Q* m1 D/ N P' Q: H0 w- g/dev/mapper/vg0-swap swap swap defaults 0 0
2 O, T6 [& L) Etmpfs /dev/shm tmpfs defaults 0 05 S# t$ }+ J l6 z6 F) ^/ N8 f
devpts /dev/pts devpts gid=5,mode=620 0 0
4 P$ B: n G+ f8 q f, Osysfs /sys sysfs defaults 0 01 j1 w6 o6 y+ [7 T
proc /proc proc defaults 0 0
, d( e2 R3 Y* v) r* i( n# M7 v! X: B
" W0 y$ K2 ^3 B( }) j8 f4 F4 V2 F# h5 p9 I' c6 h
-o:仅匹配被模式匹配到的字串,而非整行,就是仅显示匹配到的内容
) S5 K: K6 A D 例:只显示/etc/fstab为mapper的字串9 L) o8 |1 h) [9 b5 I
grep -o "mapper" /etc/fstab
+ j- x. b: ?5 _$ v1 V
, w( k* F: j* m0 Z$ O% d1
/ \6 \: [& ]4 }) D' h2 c# |& S3 B: J2
* h, S( [- ?9 a; }( c3
* K R, S- ?# D3 n4& {. _- f5 X% D) Y
5
' @5 ?7 ~( ^! J6 m E* L[root@localhost xiao]# grep --color=auto -o "mapper" /etc/fstab( I& E+ t3 j; _) ~
mapper4 I D% N8 a* V- j# G
mapper( R- R. c# Y0 ~" E1 {$ M9 }% g- A5 J
mapper
/ ^: q# U5 z4 Ymapper
" i8 `& C7 t3 O d4 v6 f! ~ ( u8 S2 U" M7 Z
; m0 o5 M6 j5 F) |& O -i:不区分大小写对文本进行匹配搜索
/ S! H# f! n- S. V% p; A$ ~
5 `" P3 ~# A' a! l" ?) ~- E, b wKioL1MIRVWwAigMAABuWOYUTi0180.jpg, D+ O7 a- E- ~' ^/ z7 i( n. o2 O
( [: J2 L3 s5 o& P' ^) b
* j% L7 o/ d! j9 i/ q -E:支持扩展正则表达式
7 X, a+ {+ h7 f$ g3 `
. y( {% C# Z& ]4 g( D1 q2 x -A #:显示模式匹配到的行以及后面的N行 #代表你要显示多少行
0 x# Q* {5 t" i! R* U0 \$ \- D/ Q& V# G1 B f
例:显示/etc/passwd中shutdown用户后面3行
% E1 u8 m8 t% w g& N
) x+ k7 p7 u9 `& w, y$ U6 R5 Y wKiom1MIJFbBJB0TAADVEQp00Vw654.jpg
" C5 z0 L, l, X% x
: u! K# G% @6 p6 C/ T& R+ C a( w {; K2 R, J) R) `% |
-B #:显示模式匹配到的行以及前面的N行
- A. G6 c" \& F
0 B. u$ {( k5 M0 U 例:显示/etc/passwd中shutdown用户上面2行3 b e) t; N+ E$ F2 j
8 t: S( t5 W8 Y: C: i wKioL1MIJQCgbbqwAACoQoIIoQM153.jpg& Y! V8 z) ?/ o
/ t' N- W8 O+ i% e& {) M4 B
5 P+ U6 q' T o/ P
-C #:显示模式匹配到的行以及上下的N行
2 @7 M" S+ m9 [
& Z& ^6 F4 m2 P* L 例:显示/etc/passwd中shutdown用户上下面2行3 `; u8 b2 C! R2 \3 f- X) g
2 h, s; u/ l f) M% s
wKiom1MIJZOwuHJlAAC-Tllmg7k700.jpg
: X- j5 L& v" g; h% e, d5 a9 e) H! C1 v4 T f% h$ G
a$ i4 [ k( k1 `
8 q, v* [2 i6 ?5 n& ?% P* z$ v 其实,要用好grep的强大搜索功能,那就不得不说说正则表达式了:" h! Y& O; b; h, a; o' f
正则表达式就是一类字符所书写出来的模式(pattern)、正则表达式基本上都是由元字符组成;
$ ?3 n( l- h: y6 z 那什么是元字符呢:元字符不表示字符本身的意义,而是用于额外功能性的描述。; t: o. y# C0 a- Z
基本正则表达式的元字符:学习正则表达式主要是来学习其元字符的用法后慢慢组合这些元字符来表达到正则表达式的使用,grep在默认情况下只支持基本正则表达式。
1 {4 V- W$ Y `# e5 G
$ v9 n; n4 M: s3 }5 D6 }) g" B注意:: _+ h# K v7 a3 S5 \! G s' _
模式当中一但包含元字符一定要用''或""号引起来,单双引号都可以、只不过如果其中出现了变量、并且我们希望做变量替换的话那就要使用""双引号了、否则可以不加区分的使用。
0 R3 t) C3 ]7 _' S5 L0 c2 y6 L/ z- { B! Y0 T4 e
那就来说说元字符的通配:
2 K2 Q0 I7 f7 A3 V2 \3 D& F- m .(点号):匹配任意的单个字符的; q2 x7 e8 B, N9 @, R v
例:grep "r..t" /etc/passwd! V/ V/ `5 d( a1 K6 L. x% x0 } D
rt加上两点被匹配到的只有4个字符,点号表示的是单个字符% @* a- z+ w6 o* ~' F
& \( b) G6 O; D) ]5 T) |$ a: J wKiom1MIMODQF-6wAACjXrjomz0277.jpg. i6 U- w$ B# _. |3 w* C+ L/ K
: T2 Y& T6 M' D* E0 P7 y/ m2 V: h$ z
[]:指定范围内的任意的单个字符2 ]7 v( ]+ E+ N0 S
[0-9] [[:digit:]]:表示匹配0到9的任意单个数字、两种表示方法都可以; O* s$ w& D/ S7 b& n
[a-z] [[:lower:]]:表示匹配小写的a到z的任意单个字母、即a-z% }9 J0 x8 v) u: v; j! u7 S
[A-Z] [[:upper:]]:表示匹配大写的A到Z的任意单个字母、即A-Z& \6 O) m) c% T9 e4 I- f
[[:alpha:]]:表示英文大小写字母、即:a-z,A-Z
9 O" `' ~/ v- J+ o [[:space:]]:表示包含的空白字符、即空格键,tab键
8 N4 m; w) b& Y [[:alnum:]]:表示包含数字大小写字母、即0-9,A-Z,a-z2 [; {: X. j" m
[[:punct:]]:表示包含标点符号、即:" ' ? ! ; : # $...
6 _6 J$ E: ]/ _1 S
+ M% Y0 B% x' M+ G( j, H ! m0 l. S( h E, @- k% X& E
* w5 B0 m+ u* f0 x0 H6 m& j
例:显示/etc/fstab下含有数字的行& F4 e3 A( ?0 P0 Y# t* S. l$ V9 H
) F6 i# N L) q
grep --color [0-9] /etc/fstab
. A9 d5 j9 U; s, U% L( `" K" F, U, e, J
wKiom1MIMcKyjJx6AAHGRgi8BNg162.jpg: [7 c* q1 q, V. F; E6 J
' Q3 h* p' r) r$ I6 H! |/ ?
1 D& |0 F1 z3 X) O
u% G v3 w( Z8 y7 p 例:显示/etc/fstab中包含大写字母的行0 t& y6 ] L2 E" N% ]$ k" i
# u1 `7 d" l3 n' V/ v$ e; Z( K( w3 s grep --color "[[:upper:]]" /etc/fstab
* D; D4 [. o+ X/ y; o& @% J
: y% Y: U7 F- D; k& M wKioL1MIMqmSV3XFAAEXjoMqCFg545.jpg8 I9 X" i+ Q6 X1 j; E3 J8 ?, H# B9 S
f3 K0 g; w" ]9 g2 N# M/ L }
* x3 Q) i: r) c# Q [^]:表示指定范围外的任意单个字符、就是使用了脱字符取反' a' ~ \6 Y& E; x8 l% w) I8 r
/ P5 v: X* o0 L3 I0 E
例:显示/etc/fstab中数字以外的内容
" L# ]* b7 L6 A6 Q; Y. `
, F4 U4 @7 W: l& [" z grep --color [^[:digit:]] /etc/fstab
q, K/ R- ?- _0 W: H
, J% |" m$ W, T; K+ Y wKioL1MINR-jMVKxAAHcomJRJkQ071.jpg
: B: e% r. o3 W' d/ l2 s& O3 V- M3 }' H I# g2 @
6 o6 I. S) p) Y1 Z3 A. n' W
字符的次数匹配:用来匹配其前面的字符的次数的
6 ~- y' D1 W% Z- N! Z. ` *:(星号)匹配其紧挨着星号的字符出现任意次
$ \* J; D2 d6 Y0 o0 e, q. h/ s 例:x*y就是x可以出现意次、包括0次5 ^1 {) y2 ^$ i& j6 V6 d* b
.*:(点星)匹配任意长度的任意字符+ F/ f9 D; M0 u$ }' r
\?:表示其前面的字符出现0次或者1次、\是转译字符
1 e& c7 ?, h' Y" {5 b' \ ^; J 例:x\?y:可以匹配到的只有xy和y$ K- {: Q% _, S" W9 c- ]' D
\{m\}:匹配m次 如:x\{4\}y表示y前面的x出现4前就可以被匹配到
: C2 p# Q6 H5 J" E9 V( T \{m,n\}:至少m次,至多n次
& k. P* g/ ^' j4 G \{m,\}:至少m次
+ d6 E2 `3 ]! t5 q \{0,n\}:至多匹配n次、0不可以省略. u3 V! m' I* o, e: X. ~
" @4 F/ E7 f$ j' K6 |* r . F& d, t+ F& y; _" ^4 B! Q
" }1 Q; m& C( z1 O/ a0 G
例:找出/etc/fstab文件中一位数或两位数4 I0 E. ]- f* H e& ?
3 A B/ U0 }$ @5 E, a
grep --color '\<[0-9]\{1,2\}\>' /etc/fstab: k8 t; k) K. ]0 s- _" d1 |3 R9 K( [
& T4 B! O0 O: W, c+ O
\{1,2\}:表示0-9的数字出现的至有1位、至多有2位、5 W9 @+ m+ {& e
. H K! ~% V! R: x
wKioL1MINz-C9BQNAAGLPoJJ2qQ535.jpg
$ Z. j8 W3 Y/ J/ S
; R4 l1 W8 X+ n1 d: ]7 U# r
! [ P- }+ c( Y& a, g 位置锚定符:用于指定字符出现的位置
" i' n0 y+ ]; I/ T ^:用于锚定行首,如(^Char) 匹配到的字符必须出现有行首的
Z' ^" y" ~9 |9 M $:用于锚定行尾,如(Char$) grep 'bash$' /etc/passwd
/ y6 ]- {: F5 T b ^$:空白行、查找一个文件中所出现的空白行 ^hello$表示只有hello的行
5 ~ E& Q7 ~/ q" f/ p7 _
3 }5 E3 K* U7 h & A$ ]7 w% ` i) Y" r! D
' [) ~6 r6 ?2 L( X/ n$ J! Y
例:显示/etc/fstab中以#号开头的行
# I0 E& N: b% d8 N& d5 O
- }3 N9 z2 _% Y, k grep --color "^#" /etc/fstab
6 G% N3 K g& K8 ~" L$ U# S: ]/ t1 A8 }* f5 e. t% M
wKiom1MIOU_D3iLmAADoBRKfGD8531.jpg
; d0 ]9 F7 P$ p! y$ i* z# q7 \. I; O( v5 Y1 K" T9 j9 N
0 f: X/ o% _4 p p" H. S$ C7 b6 ^
单词的锚定:4 y1 P! q% h" P1 [; h* c6 _6 k, C ^
\<char:锚定词首,\<[r]表示一行以r开头的单词都可以匹配、也可以使用\b表示
- C" s5 h! D' Q, |% C) `0 g char\>:锚定词尾,一行以r开头的单词都可以匹配、\b
7 _" C6 w3 q0 A U$ G% M3 C \<hello\>:表示精确锚定hello这个单词
3 o3 e# e; e" T+ P _3 Q \<h…o\>:表示以h开头、以o结尾、中间跟了任意三个字符的单词
_1 y( r; w% j/ v/ G6 U3 E4 b+ z
3 S: P, R; U, z' R
8 z3 X. x( K/ ?% i8 e 例:显示/etc/passwd中以stu开头的单词; o0 T: F/ C' r q; g/ c+ e4 q
+ Y, G( B! a( _# J6 t6 K' n0 \
grep --color "\<stu" /etc/passwd 只要是以stu开头的单词都会被匹配到
( k5 _, X4 {& ]! s
1 r: n8 Y( s* K; {6 b6 M wKioL1MIOomhPD_NAAGB9xe3l0Y589.jpg
* @: y$ e5 P$ G; z$ j
) W1 `" J" K! p" Y8 A
9 Q) d# Z- y% m7 B5 e. {
5 u d$ r( P* Q& k( P% ? 分组元字符:- I- i& p+ A/ p3 K$ x
\(\):分组 \是转译字符
1 U0 z. T4 ]. o0 z, J U 例:\(ab\)*xy8 u. y, y' [; U7 B4 m) Y% R
ab括起来表示一个组了,表示xy前面的ab组现出任意次,可以被匹配到的4 j8 e0 E9 X; C$ A. A
abxy,ababxy,ababababxy,abababababababxy,......2 w2 d' K: o+ r! ?) ~5 B
& r3 C+ e- x8 ?& ~
引用: 对分组的字符块进行引用
$ K+ B t6 l( |! X8 B9 A \1:后向引用,引用前面的第一个左括号以及与之对应的右括号中模式所匹配到的内容9 N- n2 R% L# \
\2:后向引用,引用前面的第二个左括号以及与之对应的右括号中模式所匹配到的内容
0 w/ r% q& O4 } .......
# }2 ^' _6 F ?6 M+ r
8 y* h' J. p7 R8 J9 w1 U; F4 e }% X4 Q% w& `' I! `
例:\(a.b\)xy\1 可以匹配到的有(abxyab不可以匹配到)4 y0 l6 t3 {; `
akbxyakb,a3bxya3b,aYbxyaYb
# H# q# G/ R+ `' [. r1 g7 O* D. i( N
例:我们来看这个例子、找出以下love与之对应的lover、like与之对应的liker
# ^& J7 H9 c% b7 b$ i% ` Q v
% n0 g1 y# t7 v T; k% e He like his lover.( {: p' E/ N4 K7 l: n1 V- k
She love her liker.
0 o2 R: O8 E6 K" G5 x5 p9 s He love his lover.
; b- L$ |# c. u0 X# B1 j: I" Y She like her liker.5 w7 o6 w C, I$ ?( F2 Z# z/ a
6 m2 J+ T, W, E. k3 D
wKiom1MIThPBv5PAAABjf81TDQo797.jpg
: |. t" e+ S9 F# @0 c4 T/ e! y; x/ b+ C! ]
) ^2 Q; C" Y+ h1 f4 ?( L# {
1 \9 w, T% y- s1 l) h. L. q% |正文之:egrep的详细介绍
( S0 X7 ]- D- m) s, ^ egrep:使用扩展正则表达式来构建模式,相当于grep –E、通常写成egrep、用法基本上跟grep的相同、只是有些不需要\转译
. t2 C" K. J( h; a. t5 ]
$ l; m& G2 C' z: K. r& | 元字符:字符匹配9 u5 |# `. h+ J7 s1 c- `3 h) s% o& C
* q* t7 X7 Z+ m; ~ .:匹配任意单个字符
( ]6 w( v9 t8 e1 u8 a3 A& e []:指定范围内的任意单个字符
1 E1 r- q2 _- C1 {4 i) ^- H0 B/ c5 G* ?: m$ [
次数匹配:' W; s( U& s5 K
*:匹配其紧挨着星号的字符出现任意次1 g8 w \5 J- `% d3 e N
?:表示其前面的字符出现0次或者1次
! Z( D) P M' E/ o +:匹配其前面的字符至少1次0 Y/ C) G" {, s' o m6 T' K
{m}:匹配其前面的字符m次
. U, S* T$ i; @; ~; Z {m,n}:至少m次,至多n次
9 v/ a P) M) N: j# w. c1 @ {m,}:至少m次
* D. G9 x+ ]4 c8 ~ ]) | {0,n}:至多n次
' R* O6 [3 V C1 m4 h! o4 Q8 q i: @ R- m' F" c
1 M) M% e! Z) j* O. n1 ] K8 w
/ `% s* P# O% u3 Q' E 例:找出/etc/fstab文件中一位数或两位数5 P% J% L) ]* p4 \. \6 `' k9 o
& b* |9 B: L& y0 s: T
egrep --color '\<[0-9]{1,2}\>' /etc/fstab {}不需要转译
: v3 t2 P2 E7 ?+ m5 _5 l' y
" m G; H& u3 o% k wKioL1MIP6PDdqM_AAHTjWq39Sc923.jpg5 d& }# ~: _. K7 N7 c
# l/ g B; p& j7 J: c& j' k
+ H3 }* _5 o7 c
做位置锚定:
: q; n7 d( Z( @2 c3 o7 } ^:行首锚定- G8 r) }+ d8 u S+ A1 Q# n2 V
$:行尾锚定. w: P" z( |0 i% E+ o
\<:词首. [5 C+ ~* |4 z+ ]. U% l
\>:词尾+ w3 R8 [) M% q
; R8 y2 F, r; K' h+ }+ L0 y: _- L" q
分组:* V% C; x! o6 K
():分组
& v$ h. r/ V0 [( c& p6 u9 F |:或者 ab|xy意思为ab或者xy a(b|x)y意思为aby或者axy6 ~4 r% {. m) r$ P8 @. Z5 `
" ^) ]( [, {, ?4 @/ j5 g9 |/ a7 Y正文之:fgrep的详细介绍. ?2 P2 |) a4 w: n Z
fgrep:fash,它不解析正则表达式、想找什么就跟什么就可以了;: o D0 k3 L0 h1 t' [; K
例:
' `2 ?2 k+ m/ b; B# O! D% D5 b fgrep "/bin/bash" /etc/passwd
' j* C4 O- R( d2 ]% i
& K. ?. I g9 f, ]0 U m 9 N9 k% K- p# u$ E: S
/ C' P; p$ l x( L7 l, x 例:显示/etc/fstab中含有defaults的行
5 _) z: W' m8 x9 b8 e
( l) ~( y; w$ e! h* b3 b fgrep --color "defaults" /etc/fstab |& D, f" [6 c f7 E% _( m
" `- s+ R+ s" S wKiom1MIQOHxaJCCAAE_77vJH6U784.jpg |
|