grepの正規表現

grepの正規表現

1、grepコマンドフォーマット

grep [选项] pattern filename filename.....
 # grep 'Tom' /etc/passwd
 # grep ‘bash shell’ /etc/passwd
找到:          grep返回的退出状态为0
没找到:        grep返回的退出状态为1
找不到指定文件:grep返回的退出状态为2

grep程序的输入可以来自标准输入或管道,而不仅仅是文件,例如:
# grep 'tom'
# ps -aux | grep 'sshd'
# ll | grep '^d'   #过滤目录
# egrep ‘^root’ /etc/passwd /etc/shadow /etc/group

2、grepのオプション

-i --ignore-case    忽略大小写
-l --file-with-matches  只列出匹配行所在的文件名
-n --line-number    在每一行前面加上它在文件中的相对行
-c --count          显示成功匹配的行数
-s --no-messages    禁止显示文件中不存在或文件不可读错误
-q --quiet,--silent 静默 --quiet    grep -q 'root' /etc/passwd; echo $? 不输出结果
-v --invert-mach     反向查找,志向是不匹配的行
-R,-r  --recursive   递归针对目录
--color              颜色
-o --only-matching   只显示匹配的内容,而不是一整行
-B --before-context=NUM 输出前面几行的内容
-A --after-contest=NUM  输出后面几行的内容
-C --context=NUM        输出上下文几行的内容
-B -A -C 例如:
grep -A2 'root' /etc/passwd    #输出带root后两行
grep -B2 ‘test’ /etc/passwd    #输出带test前两行
grep -C2 'alice' /etc/passwd   #输出带alice上下两行
useradd --help | grep -C2 "\-c" 同上

3、grepを使ってメタキャラクタ

grep使用的基本元字符集: ^  $  .  *    []  [^]   \<\>   \(\)  \+  \|
^以什么开头
$以什么结尾
. 任意单个字符
* 匹配前面字符0~多次
[] 匹配其中的内容
[^] 不匹配其中的内容
\<\> 词首词尾定界符
\(\) 括号中的内容为一个组
\+ 匹配前面内容1~多次
 \|  或的关系

4、メタ文字のgrepの長時間使用

egrep(或grep -E):使用扩展元字符? + {} | ()
? 匹配0-1次 
匹配1-n次 
{n} 匹配前导内容多次 
| 或者的意思 
()其中的内容为一个组

5、grepの例

PS:確かまたはメタ文字やメタ文字を拡大するかどうかを覚えておく必要はありません、直接のegrepを使用することができ、ワイルドカードではありません。

#1用/ etc / passwdファイル的前10行举例
[ルート@ localhostの〜]#ヘッド-10 / etc / passwdファイル> passwdの
ルートX:0:0:ルート:/ルート:/ binに/バッシュ
ビン:X:1: 1:ビン:/ binに:/ sbinに/ NOLOGINの
デーモン:X:2:2:デーモン:/ sbinに:/ sbinに/ NOLOGIN
ADM:X:3:4:ADM:/ VAR / ADM:/ sbinに/ NOLOGIN
LP:X :4:7:LP:の/ var /スプール/ LPD:/ sbinに/ NOLOGIN
同期X:5:0:同期します。/ sbin:/ binに/同期
シャットダウン:X:6:0:シャットダウン:/ sbinに:/ sbinに/シャットダウン
停止X:7:0:停止します。/ sbin:/ sbinに/停止
メールX:8:12:メールの場合:/ var /スプール/メール:/ sbinに/ NOLOGINの
演算子:X:11:0:演算子: /ルート:/ sbinに/ nologinに


ルートを持つフィルター行
[ルート@ localhostの〜]#のegrepの'ルート'はpasswd
ルート:X:0:0:ルート:/ルート:/ binに/ bashのの
演算子:X :. 11:0:演算子:/ルート:/ sbinに/ nologinに


ルート・ファイル・フィールドを持つフィルタからのP *
[ルート@ localhostの〜]#のegrepの'ルート' P *
ルート:X:0:0:ルート:/ルート:/ binに/ bashのpasswdの
passwdの:演算子:X :. 11 :0:演算子:/ルート: / sbinに/ nologinに


ラインRで濾過開始
[ルート@ localhostの〜]#件のegrep '^ R' passwdの
X:0:0:ルート:ルート/:/ binに/ bashのルート


ラインフィルタの端部とのSh
[ルート@ localhostの〜]#件のegrep 'のsh $' passwdの
X:0:0:ルート:ルート/:ルート/ binに/ bashの


フィルタは、それ以降の行の文字を持っている、\ 5時後ろから逃れる
#は":X:同期5.0aa"エコー[〜ルート@ localhostの] >> passwdの
。[ルート@ localhostの〜]#1のegrepを5」.. 「passwdの
同期:X:5.0aa


ろ過AMDで始まる行
[ルート@ localhostの〜]#件のegrep '^ [AMD]'はpasswd
デーモンを:X:2:2:デーモン:/ sbinに:/ sbinに/ nologinに
ADM:X :. 3 :. 4:ADM:/ VAR / ADM:/ sbinに/ nologinに
メール:X :. 8:12です:メール:の/ var /スプール/メール:/ sbinに/ nologinに


混合の内容を完全に遵守で一致した行は、削除されません
[ルート@ localhostの〜]#件のegrep '[^ルート:X:0:0:ルート:ルート/:/ binに/ bashの]'はpasswd
ビン:X :. 1 :. 1 :ビン:/ binに:/ sbinに/ NOLOGINの
デーモン:X:2:2:デーモン:/ sbinに:/ sbinに/ NOLOGIN
ADM:X :. 3 :. 4:ADM:/ VAR / ADM:/ sbinに/ NOLOGIN
LP:X: 。4 :. 7:LP:の/ var /スプール/ LPD:/ sbinに/ NOLOGIN
......


行が一致する0-9
[ルート@ localhostの〜]#件のegrep '[0-9]' passwdの
ルート:X:0:0:ルート:ルート/:/ binに/ bashのの
ビン:X :. 1 :. 1:ビン:/ binに:/ sbinに/ nologinに
........


0-9から始まるマッチライン
[ルート@ localhostの〜]#件のegrep '^ [0-9]' passwdの


線一致するROまたはR
[ルート@ localhostの〜]#1のegrep 'のRO *' passwdの
X:0:0:ルート:ルート/:/ binに/ bashのルート
ADM:X :. 3 :. 4:ADM:/ VARを/ ADM:/ sbinに/ NOLOGIN
LP:X :. 4 :. 7:LP:の/ var /スプール/ LPD:/ sbinに/ NOLOGIN
メール:X :. 8:12である:メールの場合:/ var /スプール/メール:/ sbinに/ NOLOGIN
オペレータX:11:0:演算子 :/ルート:/ sbinに/ NOLOGIN


0-9試合は、少なくとも3回のラインに発生
ます。[root @ localhost〜]#エコー'111111' >> passwdの
[ルート@ localhostの〜]#エコー'2222222' >> passwdの
[ルート@ localhostの〜]#エコー'3333333'> > passwdの
[ルート@ localhostの〜]#1のegrep '^ [0-9] {}。6'のpasswd
111111
2222222
3333333


終了行の最初のワードシンクのフィルタリング、\ <最初の単語\>接尾辞離れて使用することができ
ます。[root @ localhostの〜]#件のegrep '\ <同期\>'はpasswd
X :. 5:0:シンク:シンク/ sbinに: / binに/同期
同期:X-:5.0aa


(シャットダウン)グループの最初の単語をフィルタリングし、中間複数の一致任意の文字、Nの最後の行
[ルート@をlocalhost〜]#1のegrep「\ <(シャットダウン)* N」passwdの
シャットダウン:X :. 6:0:シャットダウン:/ sbinに:/ sbinに/シャットダウン


ルート濾過またはシャットライン
[ルート@ localhostの〜]#のegrepの'ルート|シャット'はpasswd
ルート:X:0:0:ルート:/ルート:/ binに/ bashの
シャットダウン:X :. 6:0:シャットダウン: / sbinに:/ sbinにシャットダウン/
演算子:X :. 11:0:演算子:ルート/:/ sbinに/ NOLOGIN


1〜3回で行をマッチング
[ルート@ localhostの〜]#のegrepの'3+'はpasswd
X:3 :. 4:ADM:は/ var / ADM:/ sbinに/ nologinにADM
3333333


Rの背後にあるフィルターやOラインで
passwdを|#1のegrep '(O)R' [〜localhostのルート@]
X::0:0ルート:ルート/:/ binに/ bashのルート
演算子:X :. 11:0 :演算子:/ルート:/ sbinに / nologinに


hのSHまたはフィルター行、
[ルート@ localhostの〜]#エコーを"SHUTDOWN ....." >> passwdの
[ルート@ localhostの〜]#のegrepの'SH | H' passwdの
ルート:X:0:0:ルート:/ルート:/ binに/ bashの
シャットダウン:X :. 6:0:シャットダウン:/ sbinに:/ sbinに/シャットダウン
HALT:X :. 7:0:HALT:/ sbinに:/ sbinに/ HALTの
SHUTDOWN .....


R ROろ過や文字が行に表示されて0-1時間の後
、[ルート@ localhostの〜] passwdのegrepの# 'RO?'
ルート:X:0:0ルート:ルート/:/ binに/ bashのは
ADM:X :. 3: 。4:ADM:/ VAR / ADM:/ sbinに/ NOLOGIN
LP:X :. 4 :. 7:LP:の/ var /スプール/ LPD:/ sbinに/ NOLOGIN
メール:X :. 8:12である:メールの場合:/ var /スプール/メール:/ sbinに/ NOLOGIN
演算子:X :. 11:0:演算子:ルート/:/ sbinに/ NOLOGIN

おすすめ

転載: blog.51cto.com/13760226/2411250