Linux文本處理工具之grep

grep:

description

  • Global search Regular expression and Print out the line.

function

  • 文本搜索工具廊蜒,根據(jù)用戶指定的"模式"對目標(biāo)文本進(jìn)行匹配檢查倡蝙;打印匹配到的行;
    parttern
  • 由正則表達(dá)式字符及文本字符所編寫的過濾條件
    • REGXP: 由一類特殊字符及文本所編寫的某事刽肠,其中有些字符不表達(dá)字符字面意義,而表示控制或通配功能
      • 基本正則表達(dá)式: BRE(grep 默認(rèn)支持)
      • 擴(kuò)展正則表達(dá)式: ERE (grep -E,egrep)
    • 正則表達(dá)式引擎:

synopsis

    grep [OPTION...] PATTERNS [FILE...]
    grep [OPTION...] -e PATTERNS ... [FILE...]
    grep [OPTION...] -f PATTERN_FILE ... [FILE...]

options

  • --color=auto: 對匹配到的文本著色顯示
  • -v: 顯示沒有被pattern匹配到的行
  • -i: 匹配時忽略大小寫
  • -o: 僅顯示匹配到的字符串
  • -q: 不輸出任何信息
  • -A #: after, 后#行
  • -B #: befire, 前#行
  • -C #: context, 前后各#行
  • -E: 使用ERE

基本正則表達(dá)式原字符

字符匹配

  • .: 匹配任意單個字符
  • [0-9...]: 匹配指定范圍內(nèi)的任意單個字符
  • [^]: 匹配指定范圍外的任意單個字符
  • [:digit:] 任意數(shù)字,相當(dāng)于0-9(實際用的時候要[[:digit:]]這樣用)
  • [:lower:] 任意小寫字符
  • [:upper:] 任意大寫字符
  • [:alpha:] 任意大小寫字符
  • [:alnum:] 任意數(shù)字或字母
  • [:space:] 任意空格字符
  • [:punct:] 標(biāo)點符號
  • [:alnum:] [:alpha:] [:blank:] [:cntrl:]
  • [:digit:] [:graph:] [:lower:] [:print:]
  • [:punct:] [:space:] [:upper:] [:xdigit:]

匹配次數(shù): 用在要指定次數(shù)的字符后面竭沫,用于指定前面的字符要出現(xiàn)的次數(shù)

  • *:匹配前面的字符任意次
    • 例如: grep "x*y"能匹配到"abxy","xay","ay","xxxxxxy"
  • . *: 任意長度的任意字符
  • ?: 匹配其前面的字符0次或1次,即可有可無
  • +: 匹配其前面的字符至少一次
  • {m}: 匹配前面的字符m次
  • {m,n}: 匹配前面的字符至少m次,至多n次
    • {0,n}: 匹配前面的字符至多n次
    • {m,}: 匹配前面的字符至少m次

位置錨定

  • ^: 行首錨定: 用于模式最左側(cè)
  • $: 行尾錨定: 用于模式最右側(cè)
  • ^PATTERN$: 用于模式匹配整行
    • ^$: 空行
    • ^[[:space;]]*$
  • < 或 \b: 詞首錨定: 用于單詞模式的左側(cè)
  • > 或 \b: 詞尾錨定: 用于單詞模式的右側(cè)
  • <PATTERN>: 匹配整個單詞

分組

  • (): 將一個或多個字符捆綁在一起橙困,當(dāng)作一個整體處理 例如 (xy)*ab

    Note 分組括號中的模式匹配到的內(nèi)容會被正則表達(dá)式引擎記錄于內(nèi)部的變量中依啰,這些變量的命名方式為: \1,\2,\3,.....

  • 后向引用: 引用前面的分組括號中的模式所匹配的字符串,(而非模式本身)

練習(xí)

  • 顯示/proc/meminfo文件中以大小s開頭的行(要求: 使用兩種方式)
    grep -i '^s' /proc/meminfo
    grep '^[Ss]' /proc/meminfo
  • 顯示/etc/passwd文件中ID號最大的用戶的用戶名
    sort -t : -k 3 /etc/passwd | tail -1 | cut -d : -f 1
  • 顯示/etc/passwd文件中不以/bin/bash結(jié)尾的行
    grep -v "/bin/bash$" /etc/passwd
  • 如果root用戶存在, 顯示其默認(rèn)的shell程序
    grep '^root>' /etc/passwd &>/dev/null && grep '^root>' /etc/passwd | cut -d : -f 7
    id root &> /dev/null && grep '^root>' /etc/passwd | cut -d : -f 7
  • 找出/etc/passwd中的兩位或三位數(shù)
    grep -o '[[:digit:]]{2,3}>' /etc/passwd
  • 顯示/etc/rc.d/rc.sysinit文件中, 至少以一個空白字符開頭且后面存在非空白字符的行
    grep '[[:space:]]+[["space"]]+' /etc/grub2.cfg
  • 找出"netstat -tan" 命令的結(jié)果中以'LISTEN'后跟0案训、1或多個空白字符結(jié)尾的行
    netstat -tan | grep '<LISTEN[[:space:]]$*'
  • 添加用戶bash买置、testbash、basher萤衰、以及nologin(其shell為/sbin/nologin): 而后找出/etc/passwd文件中用戶名同shell名的行
    grep '(^[[:alnum:]]>).\1$' /etc/passwd

egrep

egrep = grep -E

synopsis

egrep [OPTIONS] PATTERN [FILE...]

PATTERNB擴(kuò)展正則表達(dá)式

字符匹配

  • .
  • [fdsafd]
  • [^]

次數(shù)匹配

  • *
  • ?
  • +
  • {m}
  • {m,n}

錨定

  • ^
  • $
  • <,\b
  • >,\b

分組

  • ()

后向引用: \1,\2

或者

  • a|b

練習(xí)

  • 顯示/proc/meminfo文件中以大小s開頭的行(要求: 使用兩種方式)
    egrep -i '^s' /proc/meminfo
    egrep '^[Ss]' /proc/meminfo
  • 顯示/etc/passwd文件中ID號最大的用戶的用戶名
    sort -t : -k 3 /etc/passwd | tail -1 | cut -d : -f 1
  • 顯示/etc/passwd文件中不以/bin/bash結(jié)尾的行
    egrep -v "/bin/bash$" /etc/passwd
  • 如果root用戶存在, 顯示其默認(rèn)的shell程序
    egrep '^root>' /etc/passwd &>/dev/null && egrep '^root>' /etc/passwd | cut -d : -f 7
    id root &> /dev/null && egrep '^root>' /etc/passwd | cut -d : -f 7
  • 找出/etc/passwd中的兩位或三位數(shù)
    egrep -o '[[:digit:]]{2,3}>' /etc/passwd
  • 顯示/etc/grub2.cfg文件中, 至少以一個空白字符開頭且后面存在非空白字符的行
    egrep '[[:space:]]+[["space"]]+' /etc/grub2.cfg
  • 找出"netstat -tan" 命令的結(jié)果中以'LISTEN'后跟0堕义、1或多個空白字符結(jié)尾的行
    netstat -tan | egrep '<LISTEN[[:space:]]$*'
  • 添加用戶bash、testbash脆栋、basher倦卖、以及nologin(其shell為/sbin/nologin): 而后找出/etc/passwd文件中用戶名同shell名的行
    egrep '(^[[:alnum:]]>).\1$' /etc/passwd
  • 顯示當(dāng)前系統(tǒng)root、centos或user1用戶的默認(rèn)shell和UID
    egrep '^(root|centos|user1)>' /etc/passwd | cut -d : -f 3,7
  • 找出/etc/rc.d/init.d/functions文件(centos6)中某單詞后面跟一個小括號的行
    egrep -o '[_[:alpha:]]+()' /etc/rc.d/init.d/functions
  • 找出ifconfig命令結(jié)果中1-255之間的數(shù)值
    ifconfig | egrep -o '<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>'
  • 找出ifconfig命令結(jié)果中的ip地址
    ifconfig | egrep -o '(<([0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>.){3}<([0-9]|1[0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])>'

fgrep: 不是用引擎 直接匹配字符串

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末椿争,一起剝皮案震驚了整個濱河市怕膛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌秦踪,老刑警劉巖褐捻,帶你破解...
    沈念sama閱讀 218,036評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異椅邓,居然都是意外死亡柠逞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評論 3 395
  • 文/潘曉璐 我一進(jìn)店門景馁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來板壮,“玉大人,你說我怎么就攤上這事合住〈戮” “怎么了撒璧?”我有些...
    開封第一講書人閱讀 164,411評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長笨使。 經(jīng)常有香客問我卿樱,道長,這世上最難降的妖魔是什么硫椰? 我笑而不...
    開封第一講書人閱讀 58,622評論 1 293
  • 正文 為了忘掉前任繁调,我火速辦了婚禮,結(jié)果婚禮上最爬,老公的妹妹穿的比我還像新娘涉馁。我一直安慰自己,他們只是感情好爱致,可當(dāng)我...
    茶點故事閱讀 67,661評論 6 392
  • 文/花漫 我一把揭開白布烤送。 她就那樣靜靜地躺著,像睡著了一般糠悯。 火紅的嫁衣襯著肌膚如雪帮坚。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,521評論 1 304
  • 那天互艾,我揣著相機(jī)與錄音试和,去河邊找鬼。 笑死纫普,一個胖子當(dāng)著我的面吹牛阅悍,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播昨稼,決...
    沈念sama閱讀 40,288評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼节视,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了假栓?” 一聲冷哼從身側(cè)響起寻行,我...
    開封第一講書人閱讀 39,200評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匾荆,沒想到半個月后拌蜘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,644評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡牙丽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,837評論 3 336
  • 正文 我和宋清朗相戀三年简卧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烤芦。...
    茶點故事閱讀 39,953評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡举娩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情晓铆,我是刑警寧澤,帶...
    沈念sama閱讀 35,673評論 5 346
  • 正文 年R本政府宣布绰播,位于F島的核電站骄噪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏蠢箩。R本人自食惡果不足惜链蕊,卻給世界環(huán)境...
    茶點故事閱讀 41,281評論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谬泌。 院中可真熱鬧滔韵,春花似錦、人聲如沸掌实。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,889評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽贱鼻。三九已至宴卖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間邻悬,已是汗流浹背症昏。 一陣腳步聲響...
    開封第一講書人閱讀 33,011評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留父丰,地道東北人肝谭。 一個月前我還...
    沈念sama閱讀 48,119評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像蛾扇,于是被迫代替她去往敵國和親攘烛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,901評論 2 355

推薦閱讀更多精彩內(nèi)容