正則表達式及grep用法總結

描述:

grep: Global search REgular expression and Print outthe line.

作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行;

模式:由正則表達式字符及文本字符所編寫的過濾條件

語法格式:grep [OPTIONS] PATTERN [FILE…]

OPTIONS(選項):

 – -color=auto:  對匹配到的文本著色顯示;

 -v:  顯示不能夠被pattern 匹配到的行

 -i:  忽略字符大小寫

 -n:顯示匹配的行號

 -c:  統計匹配的行數

 -o:  僅顯示匹配到的字符串;

 -q:  靜默模式,不輸出任何信息

 -A #: after,  

 -B #: before,  

 -C # context,  前后各

 -e :實現多個選項間的邏輯or 關系

 -w :整行匹配整個單詞

 -E :使用ERE(擴展正則表達式)

PATTERN(模式):結合正則表達式

正則表達式:

 REGEXP :由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,

       而表示控制或通配的功能

程序支持:grep, vim, less,nginx等等

基本正則表達式:BRE

擴展正則表達式:ERE

grep -E, egrep

正則表達式引擎:采用不同算法,檢查處理正則表達式的軟件模塊

PCREPerl Compatible Regular Expressions

元字符分類:字符匹配、匹配次數、位置錨定、分組

QQ圖片20160805165843.png

QQ圖片20160805165850.pngQQ圖片20160805165900.png示例:

1,查找特定字符串‘the'

[root@localhost ~]# grep -n 'the' regular_express.txt 
8:I can't finish the test.
12:the symbol '*' is represented as start.

2,反向查找特定字符串’the'

[root@localhost ~]# grep -vn 'the' regular_express.txt

3,查找不論大小寫的字符串'the'

[root@localhost ~]# grep -in 'the' regular_express.txt 
8:I can't finish the test.

4,查找test或taste這兩個單詞的字符串

[root@localhost ~]# grep -n 't[ae]st' regular_express.txt 
8:I can't finish the test.
9:Oh! The soup taste good.

5,查找含有'oo'字符串

[root@localhost ~]# grep -n 'oo' regular_express.txt 
1:"Open Source" is a good mechanism to develop programs.
18:google is the best tools for search keyword.
19:goooooogle yes!

6,查找除a-z以外的,包含'oo’的字符

[root@localhost ~]# grep '[^a-z]oo' regular_express.txt 
Football game is not use feet only.

其中:[:alnum:]表示英文大小寫字符及數字,即0-9,A-Z,a-z

    [:alpha:]表示任何英文大小寫字符,即A-Z,a-z

    [:digit:]表示數字,即0-9

    [:lower:]表示小寫字符,即a-z

    [:upper:]表示大寫字符,A-Z

    [:space:]表示任何空白字符

7,查找字符串'the'開頭的行

[root@localhost ~]# grep '^the' regular_express.txt 
the symbol '*' is represented as start.

8,查找非字母開頭的行

[root@localhost ~]# grep -n '^[^[:alpha:]]' regular_express.txt 
1:"Open Source" is a good mechanism to develop programs.
21:# I am VBird

9,查找以.結尾的行

[root@localhost ~]# grep -n '\.$' regular_express.txt 
1:"Open Source" is a good mechanism to develop programs.
2:apple is my favorite food.

10,查找空白行

[root@localhost ~]# grep -n '^$' regular_express.txt 
22:

11,查找開頭是g而結尾是d,中間包含兩個字符串的行

[root@localhost ~]# grep -n 'g..d' regular_express.txt 
1:"Open Source" is a good mechanism to develop programs.
9:Oh! The soup taste good.
16:The world <Happy> is the same with "glad".

12,查找字符串開頭與結都是g,但兩個g之間僅能存在至少一個o的行,即gog,goog,goooog

[root@localhost ~]# grep -n 'goo*g' regular_express.txt 
18:google is the best tools for search keyword.
19:goooooogle yes!

13,查找g開頭與g結尾的字符串,當中的字符可有可無,即g,gg,ggg,gggg

[root@localhost ~]# grep -n 'g*g' regular_express.txt 
14:The gd software is a library for drafting programs.
19:goooooogle yes!

14,查找符合'g…g'的需求的行

[root@localhost ~]# grep -n 'g.*g' regular_express.txt 
14:The gd software is a library for drafting programs.
20:go! go! Let's go.

15,查找兩個o的字符串

[root@localhost ~]# grep -n 'o\{2\}' regular_express.txt 
2:apple is my favorite food
19:goooooogle yes!

16,查找g后面接2到5個o,然后再接一個g的字符串

[root@localhost ~]# grep -n 'go\{2,5\}g' regular_express.txt 
18:google is the best tools for search keyword.

17,查找2個o以上的字符串

[root@localhost ~]# grep -n 'go\{2,\}g' regular_express.txt 
18:google is the best tools for search keyword.
19:goooooogle yes!

18,錨定單詞:列出含有root的行的信息

[root@localhost ~]# grep '\<root\>' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

egrep及擴展的正則表達式

語法格式:egrep [OPTIONS] [PATTERN] [FILE…]

      egrep =grep -E

擴展正則表達式的元字符:

字符匹配:

  .  任意單個字符

 [ ] 指定范圍內的字符

 [^] 不在指定范圍內的字符

次數匹配:

  * 匹配前面字符任意次

  ? 匹配0次,1次,可有可無

  + 匹配至少一次 

 {m} 匹配m次

 {m,n} 至少m次,至多n次

位置錨定:

   ^ 行首

   $ 行尾

   \<,\b 詞首

   \>,\b 詞尾

分組:(),  向后引用:\1,\2,…

[root@localhost ~]# echo "11.11.12.12" |egrep "([0-9]{1,3})\.\1\.([0-9]{1,3})\.\2"
11.11.12.12

或者:a|b

示例:

1,顯示用戶root 或mage 或wang 的信息

[root@localhost ~]# grep -E '^(root\>|mage\>|wang\>)' /etc/passwd
root:x:0:0:root:/root:/bin/bash
mage:x:511:518::/home/mage:/bin/bash
wang:x:512:519::/home/wang:/bin/bash


cat命令:查看文件內容

語法格式:cat [OPTION]… [FILE]…

       -E:  顯示行結束符$

       -n:  對顯示出的每一行進行 編號

       -A: 顯示所有控制符

       -b: 非空行編號

       -s 壓縮連續的空行成一行

[root@localhost ~]# cat -nE test
     1He loves his lover.        He likes his lover.$
     2She likes her liker.       She lovers her liker.$

more命令:分頁查看文件內容

語法格式:more [OPTIONS…] FILE…

       -d:  顯示翻頁及退出提示

[root@localhost ~]# more /etc/rc.d/init.d/functions

less命令:一頁一頁地查看文件或STDIN 輸出

      /文本  搜索文本

      n/N 跳到下一個或上一個匹配的結果

      less 命令是man 命令使用的分頁器

[root@localhost ~]# cat /etc/passwd |less


head命令:顯示文本前行的內容
語法格式:head [OPTION]… [FILE]…

        -c #:  指定獲取前# 字節

        -n #:  指定獲取前#行 行

        -#:  指定行數

[root@localhost ~]# head -3 /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

tail命令:顯示后行的內容

語法格式:tail [OPTION]… [FILE]…

      -c #:  指定獲取后# 字節

       -n #:  指定獲取后#行 行

       -#:  指定行數

       -f:  跟蹤顯示文件新追加的內容,常用日志監控

[root@localhost ~]# tail -f test          在另外一個終端以root用戶登錄,執行echo “123” >>test,即可顯示結果
He loves his lover. He likes his lover.
123


cut命令:按列抽取文本內容

語法格式:cut [OPTION]… [FILE]…

       -d DELIMITER:  指明分隔符,默認tab

       -f FILEDS:

           #:  # 個字段

           #,#[,#] :離散的多個字段,例如1,3,6

           #-# :連續的多個字段,  例如1-6

           混合使用:1-3,7

       -c 按字符切割

       –output-delimiter=STRING  指定輸出分隔符

       顯示文件或STDIN 數據的指定列

[root@localhost ~]# cut -d: -f1,3,7 /etc/passwd    常用選項,取出用戶的名字,UID和默認shell
root:0:/bin/bash
bin:1:/sbin/nologin

paste命令 合并兩個文件同行號的列到一行

語法格式:paste [OPTION]… [FILE]…

        -d  分隔符: 指定分隔符,默認用TAB

        -s :  所有行合成一行顯示


wc命令:統計文本數據

[root@localhost ~]# wc /etc/fstab
 12:行數  60:字數   595:字符數  /etc/fstab

  -l  統計行數

  -w  統計單詞數

  -c  統計字節數

  -m  統計字符數


sort命令:文本排序(把整理過的文本顯示在STDOUT),不改變原始文件

語法格式:sort [options] file(s)      

     -r 執行反方向(由上至下)整理

     -n   執行按數字大小整理

     -f    選項忽略(fold )字符串中的字符大小寫

     -u   選項(獨特,unique )刪除輸出中的重復行

     -t c    選項使用c 做為字段界定符

     -k X    選項按照使用c 字符分隔的X 列來整理能夠使用多次

示例:將/etc/rc.d/init.d/function文件按單詞進行排序

[root@localhost ~]# cat /etc/rc.d/init.d/functions |tr -sc '[:alpha:]' '\n' |sort -n

uniq命令:從輸入中刪除重復的前后相接的行  (常和sort  命令一起配合使用)

語法格式:uniq [OPTION]… [FILE]…

        -c:  統計每行重復出現的次數

        -d:  顯示重復過的行

        -u:  僅顯示不曾重復的行連續且完全相同方為重復

示例:將/etc/rc.d/init.d/function文件統計出現次數最多的單詞

[root@localhost ~]# cat /etc/rc.d/init.d/functions |tr -sc '[:alpha:]' '\n' |sort |uniq -c |sort -n |tail -1
     67 pid       (這是CentOS 7)

[root@localhost ~]# cat /etc/rc.d/init.d/functions |tr -sc '[:alpha:]' '\n' |sort |uniq -c |sort -n |tail -1
     83 if      (這是CentOS 6)

diff命令:比較兩個文件的不同

語法格式:diff [OPTION]… FILES
diff命令的輸出被保存在一種叫做“補丁”的文件中

使用-u選項來輸出“統一的(unified)”diff格式文件,最適用于補丁文件

  

patch命令:向文件打補丁

[root@localhost ~]# diff fstab.old fstab.new
1,2d0      表示第一行和第二行被刪除了,
<          表示第一行的內容
< #          表示第二行的內容
12a11,12     表示在原來的第12行后增加了兩行,命令為11,12
> 
> new line

要結合-b選項來自動備份改變了的文件

[root@localhost ~]# echo old >old
[root@localhost ~]# echo new >new
[root@localhost ~]# diff -u old new >patch
[root@localhost ~]# rm -f old
[root@localhost ~]# patch -b -R new patch
patching file new
[root@localhost ~]# cat new
old
[root@localhost ~]# mv new old
[root@localhost ~]# cat old
old




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

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

相關推薦

  • 文本處理三劍客之 Sed

         Sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。Sed主要用來自…

    2017-08-26
  • Linux 基礎知識(六.二)

    1、復制/etc/rc.d/rc.sysinit至/tmp目錄,將/tmp/rc.sysinit文件中的以至少一個空白字符開頭的行的行首加# [root@server01 tmp]# cp /etc/rc.d/rc.sysinit /tmp/ [root@server01 tmp]# sed -n "s@^[[:space:]]\+@#&@…

    Linux干貨 2016-11-14
  • Hadoop hdfs 分布式文件系統

    Hadoop簡介:一個分布式系統基礎架構,由Apache基金會開發。用戶可以在不了解分布式底層細節的情況下,開發分布式程序。充分利用集群的威力高速運算和存儲。Hadoop實現了一個分布式文件系統(Hadoop Distributed File System),簡稱HDFS。HDFS有著高容錯性的特點,并且設計用來部署在低廉的(low-cost)硬件…

    Linux干貨 2015-08-05
  • 計算機基礎

    計算機基礎知識簡單介紹

    2018-03-28
  • 數據庫的備份和恢復

    數據庫的備份和恢復 一 (理論篇)、數據庫備份與恢復基礎 1、數據庫的備份與恢復 備份:存儲的數據副本; 原始數據:持續改變; 恢復:把副本應用到線上系統; 僅能恢復至備份操作時刻的數據狀態; 時間點恢復: binary logs; 2、為什么備份? 災難恢復: 硬件故障(冗余)、軟件故障(bug)、自然災害、黑客攻擊、誤操作、…&nb…

    2016-11-22
  • linux內核及系統啟動流程

    Linux內核 內核概述 如圖,最上面是用戶空間(User Space),是用戶程序執行的地方;用戶空間之下是內核空間(Kernel Space),內核位于此?;诖?,GUN C Library(glibc)提供了連接內核的系統調用接口,還提供了在用戶空間應用程序和內核之間進行轉換的機制,因為內核空間和用戶空間的應用程序使用的是不同的保護地址空間。用戶空間的…

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