下一篇:七、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的指令的使用和示範了,希望可以幫助到大家,點贊加關注!!!