grep

1. 文本處理工具的使用:

 

cat 連接文件并打印到標準輸出設備,但是文件較大時,翻屏太快,與more或者less連用

命令反著輸入(tac)將會反向輸出文本文件

用法: cat 選項 參數

 

選項:

-A 顯示不可打印字符

-b 對行進行編號,空白行不編號

-s 壓縮空白行

-n 對行進行編號,包括空白航

 參數:

 文件列表

示例:

[root@centos7 ~]# cat  -A aa  //加上-A可以看到表示換行的$符號
this is aa file  line 1$
this is aa file  line 2$
$
$
this is aa file  line 3$
this is aa file  line 4$
 [root@centos7 ~]# cat  -b aa //對行進行編號,不包括空白行
1       this is aa file  line 1
2       this is aa file  line 2
 
 
3       this is aa file  line 3
4       this is aa file  line 4
[root@centos7 ~]# cat  -s aa //將行2和行3中間的兩個空行進行了壓縮
this is aa file  line 1
this is aa file  line 2
 
this is aa file  line 3
this is aa file  line 4
[root@centos7 ~]# tac aa //使用tac反向查看文件
this is aa file  line 2
this is aa file  line 1
[root@centos7 ~]# rev aa //使用rev將行內倒著輸出,效果如下
1 enil  elif aa si siht
2 enil  elif aa si siht

2. moreless,less命令的作用與more十分相似,都可以用來瀏覽文字檔案的內容,不同的是less命令允許用戶向前或向后瀏覽文件,而more命令只能向前瀏覽。用less命令顯示文件時,用PageUp鍵向上翻頁,用PageDown鍵向下翻頁。要退出less程序,應按Q鍵

 

more快捷鍵用法:

選項:

B鍵:翻頁時的上一屏

space鍵:翻頁下一屏

enter鍵:向前翻一行

Q鍵退出more命令

 

3. head和tail使用:head用于顯示文件的頭幾行內容,默認顯示前十行,可以使用-n 選項指定行數,tail與head功能類似,可以顯示文件的尾部,-n同樣可以指定顯示文件尾多少行 –f可以一直跟蹤一個文件內容變化

[root@centos7 ~]# tail -n0 -f aa & //將tail命令放入后臺并一直顯示

 

4. logger 觸發一條日志條目的更新

[root@centos7 ~]# tail -n 0 -f /var/log/messages &
[2] 39486
[root@centos7 ~]# logger "this is a test log message"
[root@centos7 ~]# Aug  5 15:04:21 centos7 root: this is a test log message

 

5. paste:合并文件的內容除了追加的方式還有兩個文件的每一行對應另一個文件的一行合并等如:

 [root@centos7 ~]# cat aa //測試文件aa
aaaaaaa
aaaaaaa
 [root@centos7 ~]# cat bb //測試文件bb
bbbbbbbbbbbbb
bbbbbbbbbbbbbb
[root@centos7 ~]# paste aa bb 一行內的合并
aaaaaaa  bbbbbbbbbbbbb
aaaaaaa  bbbbbbbbbbbbbb    
[root@centos7 ~]# paste  –s  aa bb將本來應該一列顯示的內容顯示成一行
aaaaaaa  aaaaaaa  aaaaaa
bbbbbbbbbbbbb       bbbbbbbbbbbbbb     bbbbbbbbbbb 
[root@centos7 ~]# paste -d* aa bb 指定分隔符為 *
aaaaaaa*bbbbbbbbbbbbb
aaaaaaa*bbbbbbbbbbbbbb
aaaaaa*bbbbbbbbbbb

 

6. 正則表達式:regular expression :由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能。正則表達式使用響應的算法,來實現字符的匹配。并且正則表達式分為兩類,不同的程序支持不同的正則表達式,有:

基本正則表達式,擴展正則表達式。并且正則表達式需要程序的支持:grep vim less nginx

  基本正則表達式:

         字符匹配:

         .   匹配任意單個字符;

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

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

[:digit:]  所有數字

[:lower:] 所有小寫字母

[:upper:] 所有大寫字母

[:alpha:] 所有字母包括大小寫

[:punct:] 所有標點符號

[:space:] 空格和tab

 

匹配次數:用在要指定次數的字符后面,指定前面字符出現的次數

*  匹配前面的字符人一次包括0

貪婪模式 盡可能長的匹配

.* 任意長度的任意字符

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

\+ 匹配前面字符最少一次

\{m\} 匹配前面的字符m

\{m,n\} 匹配前面的字符最少m次,最多n次,并且是閉區間

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

\{m,\} 匹配前面的字符最少m

 

位置錨定:定位出現的位置

^ 行首錨定,模式的最左側

$ 行尾錨定,用于模式的最右側

^pattern$ 整行匹配

         ^$ 空行

         ^[[:space:]]*$ 空白行

\< (也可以用\b)詞首錨定,用于單詞模式

\> (也可以用\b 詞尾錨定,用于單詞模式

 

分組: \(\) 將一個或多個字符捆綁在一起處理如\(root\)\+ 匹配多次root這個單詞,多個分組時,每一個括號匹配到的字符串都會保存在一個變量中 \1 ,\2 ,這些變量可以調用出來

7. grep 的使用:grep:(global search regular expresion and print out the line),根據用戶指定的模式進行匹配檢查,打印匹配的行

  

grep選項:

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

-v 取補集,即匹配到的條件的補集

-i 忽略大小寫

-n 顯示匹配到的行數

-c 統計匹配到的行數

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

-q 不輸出任何信息

-A -B -C輸出后幾行或前幾行,AB后加相應的數字。-CAB的并集

-e 實現邏輯或關系

-E 使用擴展的正則表達式

 

擴展正則表達式與基本的差別:

1)分組() ,匹配次數{m},{m,n}, + , ? 這些都沒有了\的轉義

2)或操作:a |b       C|catCcat     (C|c)at Catcat

 

具體示例:

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

[root@centos7 ~]# cat /proc/meminfo | grep -e "^s.*" -e "^S.*"
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:             13472 kB
Slab:             117520 kB
SReclaimable:      69404 kB
SUnreclaim:        48116 kB
[root@centos7 ~]# cat /proc/meminfo | grep -e "^[sS].*"
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:             13472 kB
Slab:             117520 kB
SReclaimable:      69404 kB
SUnreclaim:        48116 kB
[root@centos7 ~]# cat /proc/meminfo | grep -E "^(s|S).*"
SwapCached:            0 kB
SwapTotal:       2097148 kB
SwapFree:        2097148 kB
Shmem:             13472 kB
Slab:             117520 kB
SReclaimable:      69404 kB
SUnreclaim:        48116 kB

 

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

[root@centos7 ~]# grep  -v  "/bin/bash$" /etc/passwd

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

[root@centos7 ~]# grep "^rpc\>.*" /etc/passwd |cut -d: -f 7
/sbin/nologin

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

[root@centos7 ~]# grep -Eo  "[1-9][[:digit:]]{1,2}" /etc/passwd  //o選項只打印匹配到的內容 
12
11
12
100
14
50
99

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

[root@centos7 ~]# grep "^[[:space:]][^[:space:]].*" /etc/grub2.cfg
         load_video
         set gfxpayload=keep
         insmod gzio
         ……

6)找出"netstat -tan" 命令的結果中以'LISTEN' 后跟0 、1或多個空白字符結尾的行

[root@centos7 ~]# netstat -tan | grep -e "LISTEN[[:space:]]*$"
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN    
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN

7)添加用戶bash 、testbash 、basher 以及nologin( shell /sbin/nologin), 而后找出/etc/passwd 文件中用戶名同shell名的行

 

[root@centos7 ~]# grep -E "(^[[:alnum:]]+).*/\1$"   /etc/passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
bash:x:1008:1008::/home/bash:/bin/bash
basher:x:1010:1010::/home/basher:/bin/bash

7)找出/etc/rc.d/init.d/functions 文件中行首為某單詞(

括下劃線)

grep -e  "[[:alpha:]_]*().*"  /etc/rc.d/init.d/functions

 

8)使用egrep 取出/etc/rc.d/init.d/functions基名,和目錄名:

 

echo /etc/rc.d/init.d/functions | grep -E  "[^/][[:alpha:]]+$" -o
echo /etc/rc.d/init.d/functions | grep -E  "[[:alpha:]/]+.*/"  -o

 

 

 

9)利用擴展正則表達式分別表示0-9 、10-99 100-199、 、

200-249 、250-255

 

[root@cnode6_8 ~]# grep -we "[[:digit:]]\{1,1\}" a.log  //0-9
0 1 2 22 34 4 5 10 11 111 23 100 123 234 244 250 10000 999
[root@cnode6_8 ~]# grep -we "[1-9][[:digit:]]" a.log  //10-99
01  0 1 2 22 34 4 5 10 11 111 23 100 123 234 244 250 10000 999
 
[root@cnode6_8 ~]# grep -we "1[[:digit:]][[:digit:]]" a.log  //100-199
 
[root@cnode6_8 ~]# grep -we "2[0-4][[:digit:]]" a.log  //200-249
[root@cnode6_8 ~]# grep -we "25[[0-5]]" a.log

 

10)顯示ifconfig命令結果中ipv4地址

 
[root@cnode6_8 ~]# ifconfig| grep 'inet\>'|cut -d: -f2|tr -s " " |cut -d " " -f1

 

統計/etc/rc.d/init.d/function中單詞出現的次數

cat /etc/rc.d/init.d/functions |tr -c  "[[:alnum:]]" "\n"|tr "[]"  "\n"|tr -s "[[:space:]]"|sort |uniq –c

 

11)用正則表達式表示手機號11 13 17 15  18

grep -e "1[13578][[:digit:]]\{9\}[^[:digit:]]

用正則表達式表示身份證號18

[root@centos7 ~]# grep  -E  "\<[1-9][[:digit:]]{16}[[:digit:]x]\>" aa
123456789012345678

 

12)用正則表達式表示郵箱

[root@centos7 ~]# grep -E "\<[[:alnum:]_]{1,16}@[[:alnum:]]{1,20}.com"  mail_test.txt

13)用正則表達式表示IP地址

[root@centos7~]# grep -E "(((\<[[:digit:]]\>)|(\<[1-9][[:digit:]]\>)|(\<1[[:digit:]]{2,2}\>)|(\<2[0-4][[:digit:]]\>)|\<(25[0-5]\>)).){3}((\<[[:digit:]]\>)|(\<[1-9][[:digit:]]\>)|(\<1[[:digit:]]{2,2}\>)|(\<2[0-4][[:digit:]]\>)|\<(25[0-5]\>))"  IPtest.txt

注意:方括號是匹配一個字符,里面加了()也不會把小括號里面的內容當成一個整體,而是把小括號當成一個普通字符匹配:

[root@centos7 testdir]# grep -E "[(jack)(34)]" aa

34 ()    (78   789 jac  jack  cui   23jack23

[root@centos7 testdir]# grep -E "(jack)|(34)" aa

34 ()    (78   789 jac  jack  cui   23jack23

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

(1)
jack_cuijack_cui
上一篇 2016-08-08 16:13
下一篇 2016-08-08 16:13

相關推薦

  • Linux文件管理命令和bash基礎特性

    1、Linux上的文件管理命令都有哪些,其常用的使用方法及其相關示例演示  文件管理命令:mkdir,rmdir,cp,mv,rm,cat,tac,head,tail,more,less mkdir命令:   mkdir – make directories   mkdir [OPTION]… DIREC…

    2017-07-13
  • 馬哥教育網絡班21期第1周課程練習 — 草稿

    1、描述計算機的組成及其功能。     計算機的主要組成部分包括:運算器、控制器、存儲器、輸入設備、輸出設備。        按更常見的組件來講:CPU = 運算器+控制器、 內存+硬盤 = 存儲器、 I/O = 輸入設備+輸出設備  &n…

    Linux干貨 2016-07-07
  • 如何練好yum的一招一式

      工作時間越久,就越有這樣一個深刻體會,一個新知識或者新的技能一個人學習起來并不會覺得吃力,反而要想把你學習的新知識或者新技能給講清楚讓普通人聽得懂才是最難的,之前我寫過一篇博客講述linux下的RPM包管理器,今天寫的練好yum的一招一式,同樣都是都是在linux系統的軟件包的安裝、卸載、升級等功能的,為什么我們還需要yum那,記得一位大哲學家…

    Linux干貨 2015-11-10
  • python面向對象第二周魔術方法詳解

    魔法方法及其使用__開頭和結束的方法,定義外部沒有辦法直接調用,但會有影響使用運算符號的魔法方法, + ,-,*,/,%,//,**, __add__,__sub__,__mul__,__truediv__,__mod__,__floordiv__,__pow__,__divmod__(?),系統內部對于數值型,字符串型,容器內型都定義了其中部分或者全部的運…

    Linux干貨 2017-11-22
  • shell腳本

    shell腳本 簡介:         使用腳本編程語言的好處是,它們多半運行在比編譯型語言還高的層級,能夠輕易處理文件與目錄之類的對象。缺點是:它們的效率通常不如編譯型語言。不過權衡之下,通常使用腳本編程還是值得的:花一個小時寫成的簡單腳本,同樣的功能用C或C++來編寫實現,可…

    Linux干貨 2016-08-15
  • 網絡管理之基礎知識

    Linux的網絡配置 IP地址 ?  它們可唯一標識 IP 網絡中的每臺設備 ? 每臺主機(計算機、網絡設備、外圍設備)必須具有唯 一的地址 ? IP地址由兩部分組成: ? 網絡ID: ? 標識網絡 ? 每個網段分配一個網絡ID ? 主機 ID: ? 標識單個主機 ? 由組織分配給各設備   IPv4地址格式:點分十進制記法  …

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