歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 正則表達式(grep)元字符及模式匹配的介紹及sed高級應用選項

正則表達式(grep)元字符及模式匹配的介紹及sed高級應用選項

日期:2017/2/28 14:48:00   编辑:Linux教程

當要查看文本中特定字符的時候,我們會經常用到GREP、SED、AWK,今天我們一起來學習下Linux中的文本過濾工具GREP和SED的基本使用:

正則表達式:
定義:
是一些字符或是特殊字符串模式的集合。
功能:根據模式搜索文本,並將符合模式的文本行顯示出來。
Pattern(模式):
文本字符和正則表達式的元字符組合而成匹配條件
grep:


grep簡介
grep(global search regular RE) < /span>and print out the line,全面搜索正則表達式並把行打印出來
是一種強大的文本搜索工具,它能使用正則表達式搜索文本,並把匹配的行打印出來。
Unix的grep家族包括grep、egrep和fgrep。egrep和fgrep的命令只跟grep有很小不同。
egrep是grep的擴展,支持更多的RE元字符, fgrep就是fixed grep或fast grep,它們把所有的字母都看作單詞,也就是說,正則表達式中的元字符
表示回其自身的字面意義,不再特殊。linux使用GNU版本的grep。它功能更強,可以通過-G、-E、-F命令行選項來使用egrep和fgrep的功能。

grep是很常見也很常用的命令,它最重要的功能就是進行字符串數據的比較,然後將符合用戶要求的字符串顯示出來。
在這裡需要說明的是,grep在數據中查找一個字符串時,是以”整行“為單位來進行數據選取的。也就是說,假如一個文件內有10行,其中有兩行具有
所搜索的字符串,則將那兩行顯示在屏幕上,其它則丟去。
注:默認情況下正則表達式工作在貪婪模式下
grep [options] PATTERN [FILE...]
-a:在二進制文件夾中,以文本文件的方式搜索數據。
-i:忽略大小寫
--color:將匹配的字符串以顏色基於現實
-v:反向查詢,即顯示出沒有被‘搜索字符串’內容的哪一行
-o:只顯示被模式匹配的字符串
grep -o 'root' /etc/passwd
root
....
-n:輸出行號
-c:計算找到‘搜索字符串’的次數
-A:# 匹配結果並將匹配結果的後#行一並顯示
-B: # 匹配結果並將匹配結果的前#行一並顯示
-C:A and b 顯示匹配結果前和後各幾行。
正則表達式就是裡面有一些元字符,這些字符不表示它本身的意思,而表示通配的意義。

介紹grep進行文件搜索時所用到的雲字符並加以介紹

搜索特定字符串、利用[]來搜索集合字符、任意一個字符(.)與重復字符(*)、
行首與行尾字符^$、限定連接重復字符范圍{}、位置錨定、組

下面我們就來一起學習元字符的含義:
^ : 錨定行首
例如:
'^root':表示以root作為行首進行查找
$ : 錨定行尾
例如:
'nologin$':表示查找以nologin結尾所匹配的行
. : 匹配任意單個字符
例如:
'r..t':表示查找以r開頭,t結尾並且中間存在兩個字符匹配的行
* : 一個單字符後緊跟*,匹配0個或多個此單字符
例如:
'ok*':表示以o為開頭後面可以沒有k個字符,也可以出現多次
.*: 任意字符
例如:
'root.*':表示查找以root開頭後面跟任意字符所匹配的行
[]:匹配[]內字符序列范圍
例如:
'[a-z]'表示匹配[]任意一個小寫字母
[^]:匹配[]內以外的字符串
例如:
'[^root]':表示除root以外的行
^$:顯示空白行
例如:
'^$':表示以空白行作為模式並顯示匹配的行
\<: 其後面的任意string必須作為單詞首部出現
例如:
'\<root':表示查找以root作為模式而且必須出現在行首
\>: 其前面的任意string必須作為單詞尾部出現
例如:
'nologin\>':表示查找以root作為模式而且必須出現在行尾
\<sting\>: 以string為整體並進行對文本文件進行查找
例如:
'\<root\>':表示以root為單詞並進行搜索
\(\):分組
例如:
\(ab\)*:把ab當作整體,ab可以出現0次,1次,或多次
\(\)\1:引用第一個左括號以及與之對應的右括號所包括的所有內容
\2:
\3:
例如:
\(ab\)\1:表示以ab為以個整體顯示,並引用前面ab字符串顯示出來

\ :用來注釋一個元字符的特殊含義。因為有在shell中一些元字符有特殊含義。
例如:
'\/'表示查找以'/'作為模式進行查找
pattern\{m\}:用來匹配前面pattern出現n次
例如:
'root\{2\}:表示匹配root字符串而且必須出現2次
pattern\{m, \}:用來匹配前面pattern至少m次,多則不限
例如:'root\{1, \}:表示至少出現1次root,多則不限
pattern\{m,n\}:用來匹配前面pattern至少m次,至多n次
例如:
'root\{1, 2\}:表示至少出現1次root,至多2次

Copyright © Linux教程網 All Rights Reserved