Linux三剑客之grep 与 egrep
生活随笔
收集整理的這篇文章主要介紹了
Linux三剑客之grep 与 egrep
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
grep: Linux上文本處理三劍客 1 grep:文本過濾(模式:pattern)工具; *(grep, egrep, fgrep)
2 sed:stream editor,文本編輯工具;
3 awk:Linux上的實現gawk,文本報告生成器;
grep: Global search REgular expression and Print out the line.
作用: 文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行; 模式:由正則表達式字符及文本字符所編寫的過濾條件; REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符不表示字符字面意義,而表示控制或通配的功能; 分兩類: 基本正則表達式:BRE 擴展正則表達式:ERE grep -E, egrep 正則表達式引擎 1 選項: 2 --color=auto: 對匹配到的文本著色顯示; 3 -v: 顯示不能夠被pattern匹配到的行; 4 -i: 忽略字符大小寫; 5 -o: 僅顯示匹配到的字符串; 6 -q: 靜默模式,不輸出任何信息; 7 -A #:after, 后#行 8 -B #: before, 前#行 9 -C #:context, 前后各#行 10 11 -E:使用ERE;基本正則表達式元字符:
字符匹配:
.: ?匹配任意單個字符; []: 匹配指定范圍內的任意單個字符 [^]:匹配指定范圍外的任意單個字符 [:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:] 匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數; *:匹配前面的字符任意次; 例如: grep "x*y"? abxy xay xxxxxxy 貪婪模式 .*:任意長度的任意字符; \?:匹配其前面的字符0或1次;即前面的可有可無; \+:匹配其前面的字符至少1次; \{m\}:匹配前面的字符m次; \{m,n\}:匹配前面的字符至少m次,至多n次; \{0,n\}:匹配前面的字符至多n次; \{m,\}:匹配前面的字符至少m次; 位置錨定: ^:行首錨定;用于模式的最左側; $:行尾錨定;用于模式的最右側; ^PATTERN$: 用于模式匹配整行; ^$: 空行; ^[[:space:]]*$ \< 或 \b:詞首錨定;用于單詞模式的左側; \> 或 \b:詞尾錨定;用于單詞模式的右側; \<PATTERN\>:匹配整個單詞; 分組: \(\):將一個或多個字符捆綁在一起,當作一個整體進行處理; \(xy\)*ab Note: 分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1, \2, \3, ... \1: 從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符; \(ab\+\(xy\)*\): \1: ab\+\(xy\)* \2: xy 后向引用:引用前面的分組括號中的模式所匹配字符,(而非模式本身) 練習實例: 1、顯示/proc/meminfo文件中以大小s開頭的行;(要求:使用兩種方式) 1 # grep '^{s|S}' /proc/meminfo 2 # grep -i '^s' /proc/meminfo2、顯示/etc/passwd文件中不以/bin/bash結尾的行;
1 # grep -v '/bin/bash$' /etc/passwd3、顯示/etc/passwd文件中ID號最大的用戶的用戶名;
1 # sort -t: -k3 -n /etc/passwd | tail -1 | cut -d: -f14、如果用戶root存在,顯示其默認的shell程序;
1 # id root &> /dev/null && grep "^root\>" /etc/passwd | cut -d: -f75、找出/etc/passwd中的兩位或三位數;
1 # grep "\<[0-9]\{2,3\}\>" /etc/passwd6、顯示/etc/rc.d/rc.sysinit文件中,至少以一個空白字符開頭的且后面存非空白字符的行;
1 # grep "^[[:space:]]\+[^[:space:]]" /etc/rc.d/rc.sysinit7、找出"netstat -tan"命令的結果中以'LISTEN'后跟0、1或多個空白字符結尾的行;
# netstat -tan | grep "LISTEN[[:space:]]*$"8、添加用戶bash、testbash、basher以及nologin(其shell為/sbin/nologin);而后找出/etc/passwd文件中用戶名同shell名的行;
1 # grep "^\([[:alnum:]]\+\>\).*\1$" /etc/passwdegrep及擴展的正則表達式
egrep = grep -E
擴展正則表達式的元字符: 字符匹配: . [] [^] 次數匹配: * ?: 0或1次; +:1次或多次; {m}:匹配m次; {m,n}:至少m,至多n次; 錨定: ^ $ \<, \b \>, \b 分組: () 后向引用:\1, \2, ... 或者: a|b C|cat: C或cat 練習實例: 1、顯示當前系統root、centos或user1用戶的默認shell和UID; 1 # grep -E '^(root|centos|user1)\>' /etc/passwd | cut -d: -f1,3,72、找出/etc/rc.d/init.d/functions文件(centos6)中某單詞后面跟一個小括號的行;
# grep -E -o "^[_[:alpha:]]+\(\)" /etc/rc.d/init.d/functions3、使用echo輸出一絕對路徑,使用egrep取出其基名;
1 # echo "/mnt/sdc" | grep -E -o "[^/]+/?$" | cut -d"/" -f1?
轉載于:https://www.cnblogs.com/maxtgood/p/6155964.html
總結
以上是生活随笔為你收集整理的Linux三剑客之grep 与 egrep的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python pip处理
- 下一篇: 2017年天津市大学生数学竞赛试题 (理