国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

linux 文本處理工具之一grep命令詳解

2020-06-13 12:05:08
字體:
來源:轉載
供稿:網友

grep(Globel Search Regular Expression and Printing out the line)全面搜索正則表達式并把行打印出來)是一種強大的文本搜索工具,是一個對行進行操作的搜索工作,它能使用正則表達式搜索文本,并把匹配的行打印出來。Unix的grep家族包括grep、egrep和fgrep。 egrep表示擴展的grep,相比grep支持更多的元字符,"grep -E"相當于egrep。fgrep是fast grep,不支持元字符,但是搜索速度更快。grep搜索的結果被送到屏幕,不影響原文件內容。

1、grep的語法[]  (man grep查看grep的幫助文檔)

    grep    [options]    'pattern'     FILE
    命令      選項         模式        文件

grep不加引號直接過濾字符串;grep在進行模式匹配的時候必須加引號,單引和雙引號都可以;grep在引用變量的時候必須加雙引號

2、grep的選項[option]

  -r:遞歸的搜索
  -v:反向選取,只顯示不符合模式的行
  -o:只顯示被模式匹配到的字符串,而不是整個行
  -i:匹配時不區分大小寫
  -A #:顯示匹配到的行時,順便顯示后面的#行(#表示數值)
  -B #:前面的#行
  -C #:前后的#行
  -E:使用擴展的正則表達式

eg:grep選項的例子

 

復制代碼
代碼如下:

cat > eg1.text << EOF
This is first
how are you
How old are you
fine,thanks
what,so what
What is your name
EOF
grep "you" eg1.text
grep -o "you" eg1.text
grep -v "you" eg1.text
grep -i "what" eg1.text
grep -A 1 "fine" eg1.text
grep -B 1 "fine" eg1.text
grep -C 1 "fine" eg1.text

 

以上代碼直接粘貼復制在linux上可直接運行,代碼解釋運行效果,如下

grep,文本處理

3、  正則表達式(man regex)是指一個用來描述或者匹配一系列符合某個句法規則的字符串的單個字符串,通常被用來檢索或替換那些符合某個
模式的文本內容。正則表達式分為:基本正則表達式和擴展正則表達式。
  元字符就是指那些在正則表達式中具有特殊意義的專用字符。

grep支持基本正則表達式的元字符:

     ^:錨點行首的符合條件的內容,用法格式"^pattern"
     $:錨點行首的符合條件的內容,用法格式"pattern$"
    ^$:匹配空白行
     .:匹配任意單個字符
     *:匹配緊挨在前面的字符任意次(0,1,多次)
    .*:匹配任意長度的任意字符
    /?:匹配緊挨在前面的字符0次或1次
/{m,n/}:匹配其前面的字符至少m次,至多n次
/{m,/}:匹配其前面的字符至少m次
 /{m/}:精確匹配前面的m次
/{0,n/}:0到n次
     /<:錨點詞首----相當于/b,用法格式:/<pattern
     />:錨點詞尾,用法格式:/>pattern
/<pattern/>:單詞錨點
   /(/):分組,用法格式:/(pattern/),引用第一個小括號的分組/1,第二個是/2,以此類推
     []:匹配指定范圍內的任意單個字符
    [^]:匹配指定范圍外的任意單個字符

eg:基本正則表達的例子

(1)、顯示/proc/meminfo文件中以不區分大小的s開頭的行;

grep "^[sS]" /proc/meminfo

(2)、顯示/etc/passwd中以nologin結尾的行;

grep "nologin$" /etc/passwd

(3)、顯示/etc/inittab中空格開頭的行;

grep "^$" /etc/inittab

(4)、顯示/etc/passwd中,以r開頭的字符而后跟了任意單個字符的行;

grep --color "^r." /etc/passwd

(5)、顯示/etc/passwd中,以r開頭后跟了o,o出現任意次的行;

grep --color "^ro*" /etc/passwd

(6)、顯示/etc/passwd文件中,r后跟了任意長度任意字符后跟了h的行;

grep --color "r.*h" /etc/passwd

(7)、顯示/etc/passwd中,r后跟了o,o出現0次或者1次的行;

grep --color "ro/?" /etc/passwd

(8)、顯示/etc/passwd中,r后跟了o,o出現至少1次至多2次的行;

grep --color "ro/{1,2/}" /etc/passwd

(9)、顯示/etc/passwd中,r后跟了o,o只出現2次的行;

grep --color "ro/{2/}" /etc/passwd

(10)、顯示/etc/passwd中,匹配root這個單詞的行;

grep --color "/<root/>" /etc/passwd

grep支持擴展表達式的元字符:支持所有基本正則表達式的元字符,有些和基本元字符在用法上不一樣,擴展正則表達式的命令egrep或者grep -E
?:匹配緊挨在前面的字符0次或1次
{m,n}:至少m次,至多n次
():分組
+:至少匹配前面的字符一次
a|b:匹配a或者b


eg:擴展正則表達式的例子

(1)、顯示/etc/passwd中,r開頭后跟了o,o出現0次或者1次的行;

egrep --color "ro?" /etc/passwd

(2)、顯示/etc/passwd中,r開頭后跟了o,o出現至少1次至多2次的行;

 egrep --color "ro{1,2}" /etc/passwd

(3)、顯示/etc/inittab文件中以一個數字開頭并以一個與開頭數字相同的數字結尾的;

 egrep --color "^([0-9]).*/1$"  /etc/inittab

grep,文本處理

(4)、顯示/etc/passwd中,r開頭后跟了o,o出現至少1次;

 

復制代碼
代碼如下:

egrep --color "ro+" /etc/passwd
grep -E --color "ro{1,}" /etc/passwd

 

(5)、顯示/etc/passwd中,匹配root或者halt的行;

 egrep --color "root|halt" /etc/passwd

(6)、顯示/var/log/secure文件中包含"LOGIN ON"或者"Failed passwd"的行;

egrep --color "(LOGIN ON|Failed passwd)" /var/log/secure

grep支持字符和字符集合
    /d:數字字符匹配。等效于 [0-9]。
    /s:匹配任何空白字符,包括空格、制表符、換頁符等。與 [ /f/n/r/t/v] 等效。
    /S:匹配任何非空白字符。與 [^ /f/n/r/t/v] 等效
    /w:匹配任何字類字符,包括下劃線。與“[A-Za-z0-9_]”等效。
    /W:與任何非單詞字符匹配。與“[^A-Za-z0-9_]”等效。
   [:digit:]:所有數字, 相當于0-9 或者/d
   [:lower:]:所有的小寫字母
   [:upper:]:所有的大寫字母
   [:alpha:]:所有的字母
   [:alnum:]:相當于[0-9a-zA-Z]
   [:space:]:空白字符 相當于/s
   [:punct:]:所有標點符號

eg:支持字符集合的例子

(1)、顯示/etc/rc.d/rc.sysinit中以#開頭,且后面跟一個或多個空白字符,而后又跟了任意非空白字符的行;

 

復制代碼
代碼如下:

grep "^#[[:space:]]/{1,/}[^[:space:]]" /etc/rc.d/rc.sysinit
grep -E "^#/s{1,}/S" /etc/rc.d/rc.sysinit

 

(2)、顯示/etc/inittab中包含了:一個數字:(即兩個冒號中間一個數字)的行;

 

復制代碼
代碼如下:

grep --color ":[[:digit:]]:" /etc/inittab
grep --color ":/d:" /etc/inittab

 

經典的例子

(1)、分組的例子

 

復制代碼
代碼如下:

cat > test.txt <<EOF
He like his liker
He love his lover
She love her lover
She like her lover
EOF
grep "l..e.*l..er" test.txt
grep "/(l..e/).*/1r" test.txt

 

grep,文本處理

grep,文本處理

(2)、匹配1-255的數字

 

復制代碼
代碼如下:

cat > num.txt << EOF
12
234
255
256
EOF
grep --color -E "/<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/>" num.txt


grep,文本處理

(3)、匹配ABC類IP地址即 1.0.0.1---223.255.255.254

 

 

復制代碼
代碼如下:

cat > ip.txt <<EOF
1.0.0.254
1.0.0.255
1.2.3.4
223.255.255.254
224.255.255.252
2.255.255.255
EOF
grep -E --color "/<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-1][0-9]|22[0-3])/.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/.([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-4])/>" ip.txt


grep,文本處理


(4)、匹配Email地址:任意長度數字字母@任意長度數字字母.(com|org|net等等)

 

 

復制代碼
代碼如下:

cat > email.txt << EOF
5678967@qq.com
jie231@sina.cn
ken_tom@netcom.org
jerry#li@baidu.net
li@souhu.net
EOF
grep -E --color "^/w+([-+.]/w+)*@/w+([-.]/w+)*/./w+([-.]/w+)*$" email.txt


grep,文本處理

(5)、匹配手機號碼:手機號碼是1[3|4|5|8]后面接9位數字的

 

 

復制代碼
代碼如下:

cat > tel.txt << EOF
13690876890
12589098379
15608764083
15820974619
138074082711
18618203761
19209783900
1329873909
EOF
grep --color -E "/<1[3|4|5|8][0-9]{9}/>" tel.txt


grep,文本處理

本文出自 “技術之路---桀” 博客

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 永定县| 察雅县| 东乡| 星子县| 静乐县| 缙云县| 东安县| 禹城市| 成武县| 漠河县| 泸定县| 伊金霍洛旗| 宾川县| 万全县| 绥宁县| 竹北市| 万年县| 治多县| 慈溪市| 横山县| 天水市| 含山县| 南安市| 太和县| 兴城市| 巢湖市| 阿合奇县| 焦作市| 北流市| 太仓市| 孟村| 茌平县| 大埔区| 长葛市| 建水县| 江源县| 彭水| 五家渠市| 雷波县| 南城县| 长宁区|