天天看點

七、shell腳本語言文本處理三劍客(grep、awk、sed)背景:一、grep

下一篇:七、shell腳本語言文本處理三劍客sed使用

目錄

背景:

一、grep

1、OPINTION參數選項 

2、grep功能示範

示例1:

示例2:

示例3:

 示例4:

 示例5:

示例6:

示例7:

 示例8:

示例9:

示例10:

 示例11:

 示例12:

 示例13:

示例14:

 示例15:

 示例16:

 示例17:

 示例18:

示例19:

示例20:

示例21:

背景:

在shell腳本中經常會做一些文本的處理,比如日志取值、記憶體取值、還有檔案名稱的取值等等都是文本的處理,在這些文本的處理過程中會經常使用到grep、awk、sed也叫做shell腳本的文本三劍客,如下就是具體的介紹grep、awk和sed的正常操作。

一、grep

grep也是過濾,作用是過濾來自一個檔案或标準輸入比對模式内容。 除了 grep 外,還有 egrep、fgrep。egrep 是 grep 的擴充,相當于 grep -E。fgrep 相當于 grep - f,用的少。 
格式:
Usage: grep [OPTION]... PATTERN [FILE]...
           

1、OPINTION參數選項 

支援的正則 作用描述
-E,--extended-regexp 模式是擴充正規表達式(ERE)
-P,--perl-regexp 模式是 Perl 正規表達式
-e,--regexp=PATTERN -e,--regexp=PATTERN
-f,--file=FILE 從檔案每一行擷取比對模式
-i,--ignore-case 忽略大小寫
-w,--word-regexp 模式比對整個單詞
-x,--line-regexp 模式比對整行
-v,--invert-match 列印不比對的行,常說取反的
輸出控制 作用描述
-m,--max-count=NUM 輸出比對的結果 num 數
-n,--line-number 列印行号
-H,--with-filename 列印每個比對的檔案名
-h,--no-filename 不輸出檔案名
-o,--only-matching 隻列印比對的内容
-q,--quiet 不輸出正常資訊
-s, --no-messages 不輸出錯誤資訊
-r,--recursive 遞歸目錄
-c,--count 隻列印每個檔案比對的行數

--include=FILE_PATTERN

--exclude=FILE_PATTERN

--exclude-from=FILE

--exclude-dir=PATTERN

隻檢索比對的檔案

跳過比對的檔案

跳過比對的檔案,來自檔案模式

跳過比對的目錄

内容行控制 作用描述
-B,--before-context=NUM 列印比對的前幾行
-A,--after-context=NUM 列印比對的後幾行
-C,--context=NUM 列印比對的前後幾行
--color[=WHEN] 比對的字型顔色

2、grep功能示範

示例1:

grep比較兩個不同的檔案的相同内容,并輸出 b 檔案中在 a 檔案相同行的内容,這裡輸出相同行,不是相同的内容就輸出的,切記。
[[email protected]~ test]# grep -f a.txt b.txt 
root:x:0:0:root:/root:/bin/bash
mwop:x:1000:1000::/home/mwop:/bin/bash
nginx:x:799:798:Nginx web server:/var/lib/nginx:/sbin/nologin
           

示例2:

grep比較兩個不同檔案的内容,并輸出 b 檔案中在 a 檔案不同的行,這裡校驗标準也是行
[[email protected]~ test]# grep -v -f a.txt b.txt 
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
           

示例3:

grep比對多個模式,這裡的xargs的作用就是将前面echo的三個參數按照每次一個參數的方式輸出到後面的指令使用
[[email protected]~ test]#  echo "a bc de" |xargs -n1 |grep -e 'a' -e 'bc' 
a
bc
           

 示例4:

grep去除空格 http.conf 檔案空行或開頭#号的行 
#原文本資訊:
[[email protected]~ test]# cat a.txt 
root:x:0:0:root:/root:/bin/bash
mwop:x:1000:1000::/home/mwop:/bin/bash

nginx:x:799:798:Nginx web server:/var/lib/nginx:/sbin/nologin
# back

#去除操作之後的資訊:
[[email protected]~ test]# grep -E -v "^$|^#" a.txt 
root:x:0:0:root:/root:/bin/bash
mwop:x:1000:1000::/home/mwop:/bin/bash
nginx:x:799:798:Nginx web server:/var/lib/nginx:/sbin/nologin

           

 示例5:

grep比對開頭不分大小寫的單詞,xargs的作用和上面的一樣,就是每次傳遞一個參數給後面的指令執行。[這裡是比對内容的範圍]
[[email protected]~ test]# echo "A a b c" |xargs -n1 |grep '[Aa]'
A
a
           

示例6:

grep隻顯示比對的字元串,比對所有的字元串
[[email protected]~ test]#  echo "this is a test" |grep -o 'is' 
is
is
           

示例7:

grep輸出比對的前五個數字,至少是兩個字元的,{2}表示比對至少兩個字元位的内容
[[email protected]~ test]# seq 1 20 |grep -m 5 -E '[0-9]{2}'
10
11
12
13
14
           

 示例8:

grep統計比對多少行,這裡比對至少2個字元位的内容,并統計有多少行
[[email protected]~ test]# seq 1 20 |grep -c -E '[0-9]{2}'
11
           

示例9:

grep比對 b 字元開頭的行,xargs就是每次輸出一個參數到後面的指令執行
[[email protected]~test]# echo "a bc de" |xargs -n1 |grep '^b' 
bc
           

示例10:

 grep比對 de 字元結尾的行并輸出比對的行,xargs的作用和上面的一樣的,-n的作用是輸出比對的内容,同時列印出比對内容所在的行号。
[[email protected]~ test]# echo "a ab abc abcd abcde" |xargs -n1 |grep -n 'de$' 
5:abcde
           

 示例11:

grep遞歸搜尋/etc 目錄下包含 ip 内容的 conf 字尾檔案 
[[email protected] ~]# grep -r 'user="root"' /etc --include *.conf
/etc/dbus-1/system.d/org.freedesktop.systemd1.conf:        <policy user="root">
/etc/dbus-1/system.d/wpa_supplicant.conf:        <policy user="root">
/etc/dbus-1/system.d/org.freedesktop.locale1.conf:        <policy user="root">
/etc/dbus-1/system.d/com.redhat.tuned.conf:     <policy user="root">
/etc/dbus-1/system.d/teamd.conf:        <policy user="root">
/etc/dbus-1/system.d/org.freedesktop.timedate1.conf:        <policy user="root">
/etc/dbus-1/system.d/org.freedesktop.machine1.conf:        <policy user="root">
/etc/dbus-1/system.d/nm-ifcfg-rh.conf:        <policy user="root">
/etc/dbus-1/system.d/org.freedesktop.hostname1.conf:        <policy user="root">
/etc/dbus-1/system.d/dbus-abrt.conf:  <policy user="root">
/etc/dbus-1/system.d/org.freedesktop.NetworkManager.conf:        <policy user="root">
/etc/dbus-1/system.d/org.freedesktop.import1.conf:        <policy user="root">
/etc/dbus-1/system.d/org.freedesktop.login1.conf:        <policy user="root">
/etc/dbus-1/system.d/nm-dispatcher.conf:        <policy user="root">
/etc/dbus-1/system.d/FirewallD.conf:  <policy user="root">
           

 示例12:

grep查詢條件排除搜尋 bak 字尾的檔案,簡單的了解就就是查詢符合内容的檔案,但是這個檔案的字尾不是bak的。

注:在/opt目錄下存在a.bak檔案和a、file檔案,其中a和file的檔案中含有root字元串, 

[[email protected] /]# grep -r 'root' /opt --exclude *.bak
/opt/a:root
/opt/file:root
           

 示例13:

grep排除來自file檔案的比對内容,具體比對檔案名稱
[[email protected] opt]#  grep -r 'root' /opt --exclude-from file 
/opt/a:root
/opt/a.bak:root
           

示例14:

 grep比對 41 或 42 的數字,seq 41 45表示擷取41到45的數字,預設是整數的
[[email protected]~ opt]# seq 41 45 |grep -E '4[12]'
41
42
           

 示例15:

grep比對至少 2 個字元的記憶體,seq 13表示顯示到13的整數值
[[email protected]~ opt]# seq 13 |grep -E '[0-9]{2}' 
10
11
12
13
           

 示例16:

grep比對至少 2 個字元的單詞,最多 3 個字元的單詞,xargs的作用和上面的一樣,每次輸出一個參數到後面的指令執行
[[email protected]~ opt]# echo "a ab abc abcd abcde" |xargs -n1 |grep -E -w -o '[a-z]{2,3}'
ab
abc
           

 示例17:

grep比對所有 IP
[[email protected] opt]# ifconfig |grep -E -o "[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}"
10.0.8.10
255.255.252.0
10.0.11.255
127.0.0.1
255.0.0.0
           

 示例18:

grep列印比對結果所在行内容和後 3 行的内容
[[email protected]~ opt]#  seq 1 10 |grep 5 -A 3
5
6
7
8
           

示例19:

grep列印比對結果所在行的内容及前 3 行的内容
[[email protected]~ opt]#  seq 1 10 |grep 5 -B 3 
2
3
4
5
           

示例20:

grep列印比對結果所在行的内容及前後 3 行的内容
[[email protected]~ opt]#  seq 1 10 |grep 5 -C 3 
2
3
4
5
6
7
8
           

示例21:

grep報錯不顯示出報錯提示資訊
#在grep中加入-s就是執行失敗,也不顯示報錯資訊,正常則顯示輸出的資訊
[[email protected] opt]# grep 'a' abc
grep: abc: No such file or directory
[[email protected] opt]# grep -s 'a' abc
[[email protected] opt]# echo $?
2

#在grep中加入-q表示正常查詢不顯示輸出内容,錯誤會顯示
[[email protected] opt]# grep  'a' a.txt 
iaaaaaa
aa
[[email protected] opt]# grep  -q 'a' a.txt 
           

總結:

如上就是grep的指令的使用和示範了,希望可以幫助到大家,點贊加關注!!!

繼續閱讀