文本處理工具之grep正則表達式

grep簡介

grep 是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來。

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命令,grep (global search regular expression and printing),全面搜索正則表達式并把行打印出來)是一種強大的文本搜索工具,它能使用正則表達式搜索文本,并把匹配的行打印出來。Linux中的grep命令包括、grep, egrep和fgrep 。egrep是grep的擴展,支持更多的re元字符,fgrep就是fast grep,搜索字符比較快,但不支持正則表達式。
然后,我們再來熟悉一下grep命令,其命令格式為:grep [options] ‘pattern’ FILE 。其中grep的常見選項:
-v:反向選取,只顯示不符合模式的行;
-o:只顯示被模式匹配的字串,而不是整個行;
-i:不區分字符的大小寫;
-r:遞歸搜索;
-A #:顯示匹配到行時,順帶顯示其后面的#個行;
-B #:顯示匹配到行時,順帶顯示其前面的#個行;
-C #:顯示匹配到行時,順帶顯示其前后的#個行;
另外 ,為了用戶查看顯示匹配的結果,可以在grep命令之后輸入  “--color=auto”,使結果呈現顏色。
二、 正則表達式
上面我們提到使用grep命令搜索正則表達式,那么我們來學習一下什么是正則表達式。
對于正則表達式,其起源并非在linux 中,正則表達式的“鼻祖”或許可一直追溯到科學家對人類神經系統工作原理的早期研究。而其含義是對字符串操作的一種邏輯公式,就是用事先定義好的一些特定字符、及這些特定字符的組合,組成一個“規則字符串”,這個“規則字符串”用來表達對字符串的一種過濾邏輯。給定一個正則表達式和另一個字符串,我們可以達到如下的目的:
1. 給定的字符串是否符合正則表達式的過濾邏輯(稱作“匹配”);
2. 可以通過正則表達式,從字符串中獲取我們想要的特定部分。
正則表達式由一些普通字符和一些元字符(metacharacters)組成。元字符不表示字符本身的意義,而用于額外功能性的描述。正則表達式的類型包括基本正則表達式和擴展正則表達式。
三、基本正則表達式
^:錨定行首的符合條件內容,用法格式 "^pattern";
$: 錨定行尾的符合條件內容,用法格式 "pattern$";
*:匹配緊挨著其前面的字符任意次 ;
.:匹配任意單個字符;
.*:匹配任意長度的任意字符(貪婪模式,盡可能的匹配);
r.*h (非錨定), ^r.*h$(錨定)
[] :匹配指定范圍內的任意單個字符;
[^]:匹配指定范圍外的任意單個字符 ;
[[:space:]]:空白字符;
\?:匹配緊挨著在其前面的字符0次或1次;
\{m,n\}:匹配其前面的字符至少m次,  至多n次;
\{m,\}:至少m次,\{0,n\}:至多n次,0-n次;
\{m\}:精確匹配到m次;
\<:錨定詞首,用法格式:\<pattern;
\>: 錨定詞尾,用法格式:\>pattern;
\<pattern>:錨定單詞;
\(\):分組,用法格式:\(pattern\);
ab任意字符ab:ab.*ab;
a.b任意字符a.b;\(a.b\).*\1 (1的含義是以相同的內容出現)。
四、擴展正則表達式
.: 任意單個字符
[ ] : 匹配指定范圍內的任意單個字符;
[^]:匹配指定范圍外的任意單個字符 ;
*:匹配緊挨著其前面的字符任意次
+:匹配其前面的字符至少1次
{m,n}:至少m次,至多n次
():分組,支持引用\1,\2
a|b:二選一
\<: 錨定詞首,用法格式:\<pattern;
\>: 錨定詞尾,用法格式:\>pattern;
^ : 錨定行首的符合條件內容
$ : 錨定行尾的符合條件內容
正則表達式是如何運用在linux的命令中的呢下面我們一起來看看幾簡單的實例分析正則表達式。
五、 正則表達式與grep命令的實戰演    練
1,顯示/etc/rc.d/rc.sysinit文件中以不區分大小的h開頭的行;
# grep  “^[hH]”  /etc/rc.d/rc.sysinit
2,  顯示/etc/passwd中以sh結尾的行;
# grep  “sh$”  /etc/passwd
3,  顯示/etc/fstab中以#開頭,且后面跟兩個或多個空白字符,而后又跟了任意非空白字符的行;
#grep  “^#[[:space:]]\{1,\}[^[:space:]]  /etc/fstab
4,  顯示/etc/rc.d/rc.local中符合形為“任意單個字符n任意字符任意單個字符n”模式的行;
# grep  “\(.i\).*\1”  /etc/rc.d/rc.local
5,  查找/etc/inittab中含有“以s開頭,并以d結尾的單詞”模式的行;
# grep  “\<s[a-zA-Z]*d\>”  /etc/inittab
或#grep  “\<s[^[:space:]]*d\>”  /etc/inittab
6,  查找ifconfig命令結果中的1-255之間的整數;
# grep | -E "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\>"
7,顯示/var/log/secure文件中包含“Failed”或“FAILED”的行;而后統計相關的行數
# egrep “(Failed | FAILED )” /var/log/secure  | wc -l
8,在/etc/passwd中取出默認shell為bash,且其用戶ID號最小的用戶的用戶名
# grep "bash$" /etc/passwd | sort -n -t: -k3 | head -1 | cut -d: -f1

原創文章,作者:zsyzgw,如若轉載,請注明出處:http://www.www58058.com/30762

(0)
zsyzgwzsyzgw
上一篇 2016-08-08
下一篇 2016-08-08

相關推薦

  • linux用戶和組管理

    linux系統是一個多用戶的系統,每個賬號都干什么用,你必須了如指掌。 【Linux用戶】 即UID分為兩大類:管理員 UID:0                               普通用戶 UID:…

    Linux干貨 2016-08-05
  • Mysql之運用MHA的功能實現服務高可用

    MHA介紹 (Master High Availability) MHA(Master HA)是一款開源的 MySQL 的高可用程序,它為 MySQL 主從復制架構提供 了 automating master failover 功能。MHA 在監控到 master 節點故障時,會提升其中擁有最新數據的 slave 節點成為新的 master 節點,在此期間,…

    2017-09-14
  • 用戶、組及其管理

    用戶和組管理    Linux是一個多用戶、多任務的操作系統。多用戶、多任務就是可以在系統上建立多個用戶,多個用戶可以在同一時間內登錄同一臺主機的系統執行不同的任務,而互不影響。例如某臺linux服務器上有4個用戶,分別是root、www、ftp和mysql,在同一時間內root用戶可能在管理維護系統,www用戶可能在修改自己的程序和操作…

    Linux干貨 2016-08-04
  • date(時間),timedatectl(時區),cal(日歷)的用法

    date+%F 顯示日期,   顯示格式如 2017-07-15+%T 顯示時間    顯示格式如 15:00:15+%Y 顯示年      顯示格式如 2017+%m 月 +%d 日+%H 時+%M 分+%S 秒+%s 從linux初始到現在經歷了多少秒+%w 顯示數字形式的星期+%a …

    Linux干貨 2017-07-14
  • 初識 vi/vim文本編輯器

    我們操作文件,終究離不開編輯文件,對文件內容的編輯,Linux系統下,我們通常使用VI/VIM來編輯文件。VI是每個Linux都會自帶的文本編輯器,VIM是VI的增強版,現在的最新版都已自帶,但是可能有些發行版本沒有自帶,可以使用sudo apt-get install vim命令安裝vim。 可以使用vi或者vim命令直接進入新的文本文件,或者vim 文件…

    Linux干貨 2017-07-29
  • 基于LNMP網站平臺,測試增加memcached緩存系統后網站訪問效果

    LNMP安裝教程鏈接:22-love cat 17周博客作業第2部分-構建一個LVS-DR模型的高性能集群 memcached 安裝及測試效果 一、概念     memcached 是一個高性能的分布式內存對象緩存系統,用于動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提高動態…

    Linux干貨 2016-08-22
欧美性久久久久