linux入門之文字處理三劍客(一)

2022-08-05 05:33:13 字數 4452 閱讀 1545

1、基本用法------grep

為了使搜尋結果更方便地被我們看到通常一般先對grep進行別名的設定,即

alias grep='grep --color=auto'

grep        關鍵字        檔案

-w : 匹配整個單詞

-r  :   迭代查詢,即在該目錄及子目錄下搜尋

-a #   顯示關鍵字行及向下的n行

-b #   顯示關鍵字行及向上的n行   

-c #   顯示關鍵字行及向上n行和向下的n行

-e 關鍵字1 -e 關鍵字2 ……  多個關鍵字之間是或的關係

例1 找出檔案中包含eth的那行

[root@localhost ~]#

cat test.sh

cat cat root dog hat dhjk

dog eth fgh ws lc hat jk

cek chech change wes wen root

linuc linux cut mimi wenwnen jk

[root@localhost ~]#

cat test.sh |grep -n 'eth'

2:dog eth fgh ws lc hat jk

例2 找出檔案中包含dog的行,忽略大小寫

[root@localhost ~]#

cat test.sh |grep -i 'dog'

cat cat root dog hat dhjk

dog eth fgh ws lc hat jk

二、 與正規表示式結合的grep

.            表示任意內容

[mage]  指定內容的範圍 m或a或g或e

[^mage]  除m及a及g及e

[:alnum:] 字母和數字

[:alpha:] 代表任何英文大小寫字元,亦即a-z, a-z

[:lower:] 小寫字母[:upper:] 大寫字母

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

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

[:cntrl:] 不可列印的控制字元(退格、刪除、警鈴...)

[:digit:] 十進位制數字[:xdigit:]十六進製制數字

[:graph:]可列印的非空白字元

[:print:] 可列印字元

[:punct:] 標點符號

* 表示前面的字元匹配任意次,可以0次,可以無限,貪婪模式

.* 表示任意內容任意長度

\? 表示前面的內容匹配0次或1次

\+ 表示前的的內容匹配1次以上

\匹配前面的字元n次

\匹配前面的字元至少m次,至多n次

\匹配前面的字元至多n次

\匹配前面的字元至少n次

^    模式最左側

$    模式最右側

^pattern$  用於模式匹配整行

\《或\b  詞首錨定

\>或\b  詞尾錨定

\1   後向引用,1代表引用前面第乙個分組

\(\)  將乙個或多個字元捆在一起重複列出

例3 顯示/proc/meminfo檔案中以大小s開頭的行

[root@localhost ~]#

grep -i ^s /proc/meminfo

swapcached: 0kb

swaptotal: 4194300kb

swapfree: 4194300kb

shmem: 2592kb

slab: 261068kb

sreclaimable: 182392kb

sunreclaim: 78676 kb

例4 找出「netstat -tan」命令的結果中以『listen』後跟任意多個空白字元結尾的行

[root@localhost ~]#

netstat -tan|grep 'listen[[:space:]]*$'

tcp 0 0 0.0.0.0:36865 0.0.0.0:*listen

tcp 0 0 0.0.0.0:111 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

tcp 0 0 127.0.0.1:25 0.0.0.0:*listen

tcp 0 0 127.0.0.1:6010 0.0.0.0:*listen

tcp 0 0 :::53191 :::*listen

tcp 0 0 :::111 :::*listen

tcp 0 0 :::22 :::*listen

tcp 0 0 ::1:631 :::*listen

tcp 0 0 ::1:25 :::*listen

tcp 0 0 ::1:6010 :::* listen

例5 找出/etc/passwd使用者名稱同shell名的行

[root@localhost ~]#

cat /etc/passwd |grep '^\(.*\):.*/\1$'

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:501:501::/home/bash:/bin/bash

nologin:x:505:505::/home/nologin:/sbin/nologin

例6 利用df和grep,取出磁碟各分割槽利用率,並從大到小排序

root@localhost ~]#

df |grep /dev/sd |grep -o '[0-9]\'% |sort -n -r

20%19%

1%

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

[root@localhost ~]#

echo /etc/rc.d/init.d/functions/ |egrep -o "[^/]+/?$"

functions/

例8 使用egrep取出上面路徑的目錄名

[root@localhost ~]#

echo "/etc/rc.d/init.d/functions" |egrep -o ".*/." |egrep -o ".*/"

/etc/rc.d/init.d/

例9 統計last命令中以root登入的每個主機ip位址登入次數

[root@localhost ~]#

last |grep root |grep '\([0-9]\.\)\[0-9]\' -o |sort | uniq -c

1 172.18.250.118

21 172.18.250.203

1 172.18.251.174

2 172.18.251.53

例10 顯示ifconfig命令結果中所有ipv4位址

[root@localhost ~]#

ifconfig |egrep -o "\<(([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])\>"

172.18.251.84

172.18.255.255

255.255.0.0

192.168.248.129

192.168.248.255

255.255.255.0

127.0.0.1

255.0.0.0

Linux文字處理三劍客

grep 作用 文字搜尋工具,根據使用者指定的 模式對目標檔案逐步進行匹配檢查,列印匹配到的行 grep root etc passwd grep命令選項 grep user etc passwd v 顯示不被pattern 匹配的行 e 僅顯示匹配到的字串 grep user etc passwd...

linux文字處理三劍客

常用引數 v 顯示不能夠被匹配到的行 i 忽略大小寫字元 o 僅顯示匹配到的字串 q 靜默模式,不輸出任何資訊 a 後 行 b 前 行 c 前後各 行 e 使用ere,相當於egrep常用引數 n 只列印模式匹配的行 e 直接在命令列模式上進行sed動作編輯,此為預設選項 f 將sed的動作寫在乙個...

文字處理三劍客

文字處理三劍客 劍客一 grep 作用 行 過濾 用法 grep 正規表示式 檔案 路徑 grep e 擴充套件類正規表示式 檔案 路徑 劍客二 sed 用法 sed 選項 位址定位sed命令 檔案 路徑 sed 選項 正規表示式 sed命令 檔案 路徑 sed 選項 位址定位 正規表示式 sed命...