正則表達式及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 20:10
下一篇 2016-08-08 20:10

相關推薦

  • 8月4號作業

    正則表達式表示18位身份證號 egrep "\b[0-9]{17}(x|X|[0-9])\b" 正則表達式表示手機號 egrep "\b1[3,5,8,7][0-9]{9}\b" phone 正則表達式表示郵箱 grep -E "\b[[:alnum:]].*@[[:alnum:]]{2,3}.[[:alnu…

    Linux干貨 2016-08-08
  • 第五周

    顯示/boot/grub/grub.conf中以至少一個空白字符開頭的行 egrep "^[[:space:]]+" /boot/grub/grub.conf 顯示/etc/rc.d/rc.sysinit文件中以#開頭,后面跟至少一個空白字符,而后又有至少一個非空白字符的行 egrep "^#[[:…

    Linux干貨 2016-09-19
  • Linux基礎知識點(二)

    此篇博客只是記錄第二周未掌握或不熟悉的知識點,用來加深印象。

    2018-03-13
  • M20 – 1- 第二周(2):硬鏈接與軟鏈接的區別

    在講硬鏈接與軟鏈接的區別之前,我們首先了解inode,了解inode讓我們更容易理解何為硬鏈接和軟鏈接。 inode概念        何為inode,inode就是索引節點,而inode表中存放著文件的元數據,何為元數據,元數據就是文件名稱、大小、時間戳、所有者、權限、inode等信息,而文件中的內容就是文件的數據,…

    Linux干貨 2016-08-02
  • yum –rpm前端工具詳解

     1、yum 介紹        YUM: Yellowdog Update Modifier, rpm的前端程序,用來解決軟件包相關依賴性,可以在多個庫之間定位軟件包,up2date的替代工具        &nbsp…

    Linux干貨 2016-08-24
  • LAMP—Apache編譯安裝

    一、前言:   httpd-2.2與 httpd-2.4版本相比增加了許多新特性:    1、MPM支持運行時裝載    2、支持event    3、支持異步讀寫    4、支持每模塊每目錄使用不同的日志級別    5、每請求配置<IF&gt…

    Linux干貨 2015-06-15
欧美性久久久久