grepのテキスト三銃士と正規表現

1、グレップ

1. grepを、egrepのとfgrepがどのようなものです

  1. Linuxシステムのgrepコマンドは強力なテキスト検索ツールでは、使用することができます正規表現検索テキストを、そして(標準赤にマッチ)一致する行をプリントアウトします。grepのは、グローバル正規表現を印刷の略で、すべてのユーザーのために、その使用権をグローバルな正規表現のバージョンを表します。

  2. grepのは、それが1つまたは複数のテンプレートファイル内の文字列を検索し、このように動作します。テンプレートにはスペースが含まれている場合、テンプレートをファイル名としてみなされているすべての文字列の後に、引用符で囲む必要があります。検索結果は、元のファイルの内容に影響を与えずに、標準出力に送られます。

  3. ステータス値を返すことによってgrepの検索の状態を説明するためにので、grepがテンプレート検索が成功した場合、検索が失敗した場合、それはファイルの検索が存在しない場合は1を返し、戻り2、0を返し、シェルスクリプトで使用することができます。私たちは、この戻り値は自動化されたテキスト処理の番号にすることができます。

  4. egrepを=のgrep -E:拡張正規表現  (除く\ <、\>、\ bは 他の正則を除去することができる\)

  5. fgrepは=のgrep -F:正規表現は、通常の文字列缶フィルタをサポートされていません。

   役割:テキスト検索ツール、ラインによる目標テキスト行のユーザーが指定した「パターン」のマッチングチェックに基づいて、ラインにプリントマッチング
   モード:正規表現は基準をフィルタリング文字とテキスト文字書かれた
   使用法:グレップ[OPTIONS] PATTERN [ FILE ...]

オプション:

--color =自動:色付きのテキストを照合すると、表示する
 -v:表示は線のパターンと一致しない
文字のケースを無視:-i 
-n:行番号が一致して表示
-c:統計試合行-o:表示のみマッチした文字列 
-q:サイレントモードでは出力されません任意の情報
-A#:の後、#ライン
-B#:前に、ライン#前
-C#:コンテキスト、前後の#ライン
-e:オプションの数や間の論理的な関係を達成するためにはgrep -e「CAT」-e「犬」ファイル 
-wを:単語全体と一致-Eを:使用ERE-F:fgrepは同等正規表現をサポートしていません 
-fファイル:パターンに従って処理するファイルを


2. grepの戦闘デモ

例1:

ディスクの使用率は逆の順番になります。

[ルート@ ansibledata] #DF | grepのは/ dev / SD | TR -s "" %|カット-d%-f5 |ソート-NR 
17 
5 
1

例2:

[ルート@ ansibledata] #catの/ etc / passwdファイル| grepを-nA1ルート#ラインルートをフィルタリングした後、
1:ルート:X:0:0:ルート:/ルート:/ binに/ bashの。
2 -ビン:X :. 1 :. 1 :ビン:/ binに:/ sbinに/ NOLOGIN 
- 
10:演算子:X :. 11:0:演算子:/ルート:/ sbinに/ NOLOGIN 
11ゲーム:X:12:100:ゲーム:は/ usr /ゲーム:/ sbinに。 / NOLOGIN 
[ルート@ ansibledata] #cat / etc / passwdファイル| grepを-nB1濾過ルートルート#前の行
1:ルート:X:0:0:ルート:/ルート:/ binに/ bashの
- 
9メール:X 。:8:12である:メールの場合:/ var /スプール/メール:/ sbinに/ NOLOGIN 
10:演算子:X :. 11:0:演算子:/ルート:/ sbinに/ NOLOGIN 
[ルート@ ansibledata] #cat / etc / passwdファイル|はgrepラインフィルタ前後-nC1ルート#ルート
1:ルート:X:0:0:ルート:/ルート:/ binに/ bashの。
2ビン:X :. 1 :. 1:ビン:/ binに:/ sbinに/ NOLOGIN 
- 
9 -mail:X:8:12:メール:の/ var /スプール/メール:/ sbinに/ nologinに
10:演算子:X:11:0:演算子:/ルート:/ sbinに/ NOLOGIN 
11ゲーム:X:12:100:ゲーム:の/ usr /ゲーム:/ sbinに/ NOLOGIN

例3:

[ルート@ ansibledata] #grep -eルート -eワン/ etc / passwdファイルまたはルートユーザー含む王
ルート:X:0:0:ルート:/ルート:/ binに/バッシュ
演算子:X :. 11:0:演算子: /ルート:/ sbinに/ nologinに
王:X-:1001:1001 :: /ホーム/王:/ binに/ bashの

例4:

[ルート@ ansibledata] #grepルート/ etc / passwdファイル| grepをbashのbashのルートラインとを含むなど、
ルート:X:0:0:ルートを:/ルート:/ binに/ bashの

例5:

[ルート@ ansibledata] #grep -vルート/ etc / 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 
同期X:5:0 :同期します。/ sbin:/ binに/同期
シャットダウン:X:6:0:シャットダウン:/ sbinに:/ sbinに/シャットダウン
停止X:7:0:停止します。/ sbin:/ sbinに/停止

例VI:

文字列内の交差点を削除します。

#grep -f F1、F2 [ansibledata @ルート] 
AA 
CCC 
#cat F1 [ansibledata @ルート] AA 
BBB CCC 
EE 
[ルート@ ansibledata] #cat F2 AA 
のSS CCC



2、正規表現

1、REGEXP:正規表現、文字モードと書かれたテキストの文字の特別な種類の、一部の文字(文字員)は文字通り文字、及び制御機能、またはワイルドカードを表すものではない、請求

2、プログラムのサポート:などのgrep、sedは、awkは、vimの、より少ない、nginxの、ワニス、

図3は、2つのカテゴリに分けます。

4、基本的な正規表現:BRE

5、拡張正規表現:ERE
     のgrep -E、egrepの

6、正規表現エンジン:

異なるアルゴリズムを使用して、チェック処理ソフトウェアモジュールの正規表現PCRE(Perl互換正規表現)

メタキャラクタカテゴリ:キャラクター、アンカーの整合周波数と場所、グループ

man7正規表現

基本的な正規表現のメタ文字

。任意の単一文字に一致
] [例えば、指定された範囲内の任意の1文字と一致:[王] [0-9] [AZ] [Z-ZA-A]は
[^]指定範囲外の任意の1文字と一致し
alnum:[ :]文字と数字
[:アルファ:いずれの場合英語の文字を表す、すなわちAZ、AZ 
[:下限:]小文字[:アッパー:]大文字
[:ブランク:]空白(スペースとタブ)
【:スペース:】垂直及び水平空白(比[ブランク:】広い範囲を含む)の
[:CNTRL:]制御文字(バックスペース、ベル...)印刷できない
[:桁:] 10進数:XDIGIT:16進数
[:グラフ:非ブランク印刷可能文字
[:印刷:]印刷可能な文字
[:PUNCT:]句読点

実用的な運動:

(1)。任意の1文字に一致します
[ルート@ centos7-1〜] #grep r..tの/ etc / のいずれかの文字を持つ2つのマッチの後ろpasswdのR 
X:0:0:ルート:/ルート:/ binに/ bashのルート
演算子:X :. 11: 0:演算子:/ルート:/ sbinに/ nologinに
FTP:X:14:50:FTPユーザー:は/ var / FTP:/ sbinに/ nologinに
。[centos7-1ルート@〜]#grepの家に/ etc / passwdの故郷と一致任意の文字で
X-::1000:1000:劉:/ホーム/劉:/ binに/ bashのの劉
王:X-:1001:1001 :: /ホーム/王:/ binに/ bashの

   

 [王] [0-9] [AZ] [-ZA-Z](2)[]サンプルの指定された範囲内の任意の1文字と一致します

[ルート@ centos7-1〜] #grep [王] / etc / passwdファイル

  

任意の単一の文字(3)[^]指定範囲外と一致します

  グレップ[^ 0-9]は/ etc / fstabの情報は、非数値の現在のプロファイルと一致しました

 

(4)のifconfig ens33 | grepのネットマスク| grepの[[:桁:]]デジタルと内容が一致。

注:[。]ポイントの括弧内のポイントである、ポイントは[]任意の1文字に一致させることです。

試合時間:文字が表示される直前の文字を指定し、指定された回数で使用する後

*キャラクターはゼロを含む、前述の時間のいずれかと一致する
貪欲なパターン:長い可能一致限り
*任意の長さの任意の文字は
?\ 0は、その直前の文字または1一致
\ +キャラクターマッチングフロント少なくとも1 
\ {Nを\}前の文字n回一致
\ {M、Nは\}前の文字に少なくともm回、最大n回に一致
{\、N \}文字が前方までをn回一致
少なくとも先行文字と一致} \ \ {N n回
(1)*文字はゼロを含む、前述の時間のいずれかと一致する
      貪欲なパターン:限り、可能な一致として

  

(2)任意の長さの任意の文字*

   

(3)。*任意の長さの任意の文字
grepが「行く。* GLE」F1の試合以上のO 1つの文字よりも
「* GLEグラム。」F1は、複数の文字一度文字gの先頭にマッチグレップ

  

(4)\?その前の文字0または1回の一致

(5)\ +は、少なくとも一度その直前の文字にマッチします

  

 

(6)IPアドレスを削除します。

ens33 ifconfigコマンド| grepの-o「[0-9] \ {1,3 \} \。[0-9] \ {1,3 \} \。[0-9] \ {1,3 \} \。[0-9 ] \ {1,3 \}」| ヘッド-n1

 

場所のアンカー:表示されるように配置します

^最初のアンカーラインのための左端モード
右端のパターンのためのラインの$アンカー終わり、
パターン全体のラインパターンマッチングのための^ $ 
空行^ $ 
^ [[:スペース:]] * $の空白をOK 
\ <または\ Bアンカー最初の単語、単語のために左モード
\>ワードモード権の終了アンカーBまたは\、
\ <パターン\>単語全体を

(1)^ 行首锚定,用于模式的最左侧

(2)$ 行尾锚定,用于模式的最右侧

[root@centos7-1data]#grep "bash$" /etc/passwd  #以bash结尾的行
root:x:0:0:root:/root:/bin/bash
liu:x:1000:1000:liu:/home/liu:/bin/bash
wang:x:1001:1001::/home/wang:/bin/bash
[root@centos7-1data]#grep "^root" /etc/passwd  #以root开头的行
root:x:0:0:root:/root:/bin/bash
[root@centos7-1data]#cat f1
google
gooogle
gooooogle
ggle
gogle
[root@centos7-1data]#grep "^google$" f1    #只筛选google的行
google
[root@centos7-1data]#grep -v "^$" f1   显示非空行
google
gooogle
gooooogle
ggle
gogle

grep  -v "^#"  /etc/fstab   显示非#开头的行

(3)\< 或 \b 词首锚定,用于单词模式的左侧

(4)\> 或 \b 词尾锚定,用于单词模式的右侧

(5)\<PATTERN\> 匹配整个单词

什么是单词的分隔符?

答曰:不能是数字、字母、下划线,其他的都可以。

[root@centos7-1data]#grep "root\>" /etc/passwd  以root为结尾的单词
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@centos7-1data]#grep "\<root" /etc/passwd  以root为开头的单词
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

 分组和后向引用

(1)格式

① 分组:\(\) 将一个或多个字符捆绑在一起,当作一个整体进行处理

  分组括号中的模式匹配到的内容会被正则表达式引擎记录于内部的变量中,这些变量的命名方式为: \1, \2, \3, ...

② 后向引用

引用前面的分组括号中的模式所匹配字符,而非模式本身

\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式所匹配到的字符

\2 表示从左侧起第2个左括号以及与之匹配右括号之间的模式所匹配到的字符,以此类推

\& 表示前面的分组中所有字符

③ 流程分析如下:

 (2)或者:\|

[root@centos7-1data]#grep  "\(abc\)\{3\}" f2   #表示匹配3次abc
abcabcabc
[root@centos7-1data]#cat  > f2
xyz xyz 
abc xyz abc xyz 
abc xyz xyz abc
^C
[root@centos7-1data]#grep "\(abc\).*\(xyz\).*\1"  f2  #含义是匹配以abc和xyz中间的内容,最后以abc结尾的行
abc xyz abc xyz 
abc xyz xyz abc
[root@centos7-1data]#grep "\(abc\).*\(xyz\).*\2"  f2 # 含义是匹配以abc至xyz中间的内容,最后以xyz结尾的行
abc xyz abc xyz 
abc xyz xyz abc

 grep "^\(a\|b\)"  /etc/passwd  取出a或b开头的行

ifconfig  ens33 | grep -o "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}"  取出IP地址,前面的括号分组是第一个IP.  {3}是将此IP重复3次,最后[0-9]\{1,3\} 是最后一次的IP地址 

 3、扩展正则表达式:

(1)字符匹配:

  •  .  任意单个字符
  •  []  指定范围的字符
  •  [^] 不在指定范围的字符
  •    次数匹配:
  •  * :匹配前面字符任意次
  •  ?  : 0 或1次
  •  + :1 次或多次
  •  {m} :匹配m次 次
  •  {m,n} :至少m ,至多n次

(2)位置锚定:

  •  ^ : 行首
  •  $ : 行尾
  •  \<, \b : 语首
  •  \>, \b : 语尾
  •    分组:()
  •  后向引用:\1, \2, ...
  • 或者:

    a|b a或b

    C|cat C或cat

    (C|c)at Cat或cat

(3)总结

  除了\<, \b : 语首、\>, \b : 语尾;使用其他正则都可以去掉\。

实战演示:

(1)显示基名

[root@centos7-1data]#echo  "/etc/rc.d/init.d/function" | grep  -oE "[^/]+$"
function

(2)显示目录名:两次的grep为了处理两次/

[root@centos7-1data]#echo  "/etc/rc.d/init.d/function/" | grep  -oE ".*[^/]" | grep -Eo ".*/"
/etc/rc.d/init.d/

(3)筛选出所有的IP地址

[root@centos7-1data]#ifconfig | grep -Eo "(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])"
192.168.34.102
255.255.255.0
192.168.34.255
192.168.34.117
255.255.255.0
192.168.34.255
127.0.0.1
255.0.0.0
192.168.122.1
255.255.255.0
192.168.122.255

 

 

  

 

 

おすすめ

転載: www.cnblogs.com/struggle-1216/p/11822001.html