Linux文本處理三劍客之一grep

        終于又到了一周一篇博客的日子

在這學習已經三周了,慢慢養成了寫博客的好習慣,也慢慢的懂得了怎么寫博客。這周給我印象最深刻的就是正則表達式,原本打算要寫前幾天所學的內容,但是昨天學到正則表達式讓我有點懵,所以我今天會用一天的時間去給大家詳細講解正則表達式,爭取讓那些和我一樣困解的人能夠豁然開朗,也正是因為正則表達式才激起了我學習的勁頭。

一、grep 文本過濾工具(截取關鍵字的那一行)

      grep root /etc/passwd

      grep “$USER”  /etc/passwd

      Linux文本處理三劍客之一grep

      – -color=auto 將匹配的結果著色顯示 (centos6里面在alias加入alias grep=’grep – -color=auto’就可以,centos7默認有)

  -v 反向匹配    顯示除了你輸入的關鍵字

      -i 忽略大小寫

      -n 顯示的結果前增加行號

      -c 僅顯示匹配到結果的行數

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

      -q 靜默模式,不輸出任何信息  (腳本里面用的多) echo $?可以查看出入的結果正確還是錯誤              或者 &> /dev/null

      Linux文本處理三劍客之一grep

-A# 顯示搜索關鍵字的后幾行

-B# 顯示搜素關鍵字的前幾行

例子:nmap -v -sP 172.17.252.0/24 |grep -B1 “Host is up”|grep for |cut -d” ” -f5 |wc -l       查看當前哪些主機在運行

-C# 顯示關鍵字向前#行,當前行,及向后#行

      Linux文本處理三劍客之一grep

-e 關鍵字1 -e 關鍵字2  顯示關鍵字1和關鍵字2的行

-w 匹配整個單詞

      Linux文本處理三劍客之一grep 

-E 使用擴展正則表達式 或egrep

-F 不使用正則表達式 或 fgrep 

二、正則表達式(是由一類特殊字符以及文本字符所編寫的模式,其中有些元字符不表示字面意思,而表示控制或通配的功能)

元字符分類:(1)字符匹配

                   (2)匹配次數

                   (3)位置錨定

                   (4)分組

(1)字符匹配

        . 匹配任意單個字符

        [] 匹配指定范圍內的任意單個字符

        [^] 匹配指定范圍外的任意單個字符

      Linux文本處理三劍客之一grep

      [:alnum:] 或 [0-9a-zA-Z]

      [:alpha:] 或 [a-zA-Z]  

      [:upper:] 或 [A-Z]

      [:lower:] 或 [a-z]

      [:blank:] 空白字符(空格和制表符)

      [:space:] 水平和垂直的空白字符(比[:blank:]包含的范圍廣)

      [:cntrl:] 不可打印的控制字符(退格、刪除、警鈴…)

      [:digit:] 十進制數字 或[0-9]

      [:xdigit:]十六進制數字

      [:graph:] 可打印的非空白字符

      [:print:] 可打印字符

      [:punct:] 標點符號

     (2)匹配次數(用在指定次數的字符后面,用于指定前面的字符要出現的次數)

*    表示匹配前面字符任意次,包括0或者無限次

.*   表示所有,任意長度的任意字符

\?   匹配其前面的字符0或1次

\+   匹配其前面的字符至少1次     (需要用’’引起來)

     Linux文本處理三劍客之一grep

       \{n\}   匹配前面的字符n次

       \{m,n\} 匹配前面的字符至少m次,至多n次  (重復至少m次最多n次)

       \{,n\}  匹配前面的字符至多n次

       \{n,\}  匹配前面的字符至少n次

     Linux文本處理三劍客之一grep

(3)位置錨定(定位出現的位置)

    ^   以后面內容為首

    $   以前面內容為尾

    ^$  表示空行

    \< (開始符) 或 \b 詞首錨定,開始與關鍵詞

    \> (結束符)或 \b 詞尾錨定;結束于關鍵詞

     Linux文本處理三劍客之一grep

           \<PATTERN\> 匹配整個單詞,或者字段

(4)分組

    \(\)將一個字符或者多個字符捆綁在一起 進行搜索

    \(a\).*\1  表示一行以a開頭的關鍵字,中間是任何內容,再以a結束的關鍵字

     Linux文本處理三劍客之一grep

           \| 表示或   與 grep -e  一樣

           cat /etc/httpd/conf/httpd.conf |grep -ve “^$” -e “^#”

           cat /etc/httpd/conf/httpd.conf |grep -v “^$\|^#”     (centos6中)大家可以試一下,因為太長沒有辦法截圖

三、練習(針對以上內容做幾道練習題鞏固鞏固)

1、 顯示/proc/meminfo文件中以大小s開頭的行(要求:使用兩 種方法)

      Linux文本處理三劍客之一grep

2、顯示/etc/passwd文件中不以/bin/bash結尾的行

      Linux文本處理三劍客之一grep

3、顯示用戶rpc默認的shell程序

      Linux文本處理三劍客之一grep

4、找出/etc/passwd中的兩位或三位數

      Linux文本處理三劍客之一grep

(注釋:如果不加\< \>的話多位也會顯示)

5、顯示CentOS7的/etc/grub2.cfg文件中,至少以一個空白 字符開頭的且后面存非空白字符的行

      Linux文本處理三劍客之一grep

6、找出“netstat -tan”命令的結果中以‘LISTEN’后跟任意多個空白字符結尾的行

      Linux文本處理三劍客之一grep

7、顯示CentOS7上所有系統用戶的用戶名和UID 

      Linux文本處理三劍客之一grep 

如果不加最后面 grep -v root  則root也會別列出在內,因為系統用戶是1-999

8、添加用戶bash、testbash、basher、sh、nologin(其shell 為/sbin/nologin),找出/etc/passwd用戶名同shell名的行 

      Linux文本處理三劍客之一grep

四、egrep    =grep -E

擴展正則表達式與正則表達式不同地方為有些地方可以省略\ 但是與grep需要加\相同的地方是:\<, \b :語首     \>, \b :語尾   后向引用:\1, \2

   

五、練習(針對egrep)

1、 顯示三個用戶root、mage、wang的UID和默認shell

      Linux文本處理三劍客之一grep

2、使用egrep取出/etc/rc.d/init.d/functions中其基名 

      Linux文本處理三劍客之一grep

3、利用擴展正則表達式分別表示0-9、100-199、 200-249、250-255

     Linux文本處理三劍客之一grep

echo {0..255}|egrep -o “\<[0-9]{3}\>” |egrep -o “^1[0-9]{2}”   或者echo {0..255} |egrep -o “\<[0-9]{3}\>” |egrep “^1”                  顯示100~199

echo {0..255} |egrep -o “\<[0-9]{3}\>” |egrep “^2[0-4]{1}”  顯示200~249

      Linux文本處理三劍客之一grep

以上就是我對文本處理三劍客之一grep的簡單理解,希望能夠幫住到大家。

我想再強調一點就是寫博客是個記憶深刻的很好的方法,希望大家能夠堅持下去!


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

(0)
In summerIn summer
上一篇 2017-07-29 17:03
下一篇 2017-07-29 17:27

相關推薦

  • lnmp部署實驗

    Lnmp部署 實驗環境: 1、Centos 7主機一臺,客戶機一臺。 2、在centos 7主機上部署:    Nginx  php-fpm  php-mysql  mariadb-server 實驗步驟: 1、啟動nginx服務,確保80端口打開,啟動mariadb-server,確保3306端口…

    Linux干貨 2016-10-30
  • lvm的基本使用

    lvm的創建、擴展、遷移以及邏輯卷快照的使用

    2017-12-08
  • PHP中引用的詳解(引用計數、寫時拷貝)

    《PHP5中文手冊》內容中"引用的解釋"一文的摘要: 1. PHP中引用的特性 PHP中引用意味著用不同的名字訪問同一個變量內容,引用不是C的指針(C語言中的指針里面存儲的是變量的內容,在內存中存放的地址),是變量的另外一個別名或者映射。注意在 PHP 中,變量名和變量內容是不一樣的,因此同樣的內容可以有不同的名字。最接近的比喻是 Uni…

    Linux干貨 2015-04-10
  • 基于mysql的數據庫分析系統(rsyslog)

    rsyslog:日志收集和存儲系統 1.事件在電腦中的日志記錄格式為:     日期時間 主機 進程[pid]:事件內容 2.rsyslog的特性:     多線程;     UDP,TCP,SSL/TLS,RELP; &nbsp…

    Linux干貨 2016-10-23
  • Bash Shell腳本基礎-變量類型-位置變量

    Bash Shell腳本基礎–變量類型–位置變量   §·bash shell腳本編程概述: 1 §·bash shell腳本中的變量 2     *什么是變量 2     *變量的類型 2     *ba…

    Linux干貨 2016-08-12
  • Linux基礎知識(一)

     本文的主要內容是:  1.計算機基本組成及其功能  2.linux的發行版,以及他們之間的聯系和區別  3.Linux的哲學思想  4.Linux的上的命令的使用格式  5.基礎命令 ifconfig,echo,tty,startx,export,pwd,history,shutdown,powe…

    Linux干貨 2016-09-17
欧美性久久久久