grep及正則表達式

grep

  • Linux上文本出來三劍客
    • grep:文本過濾(模式:pattern)工具们陆;
    • grep ,egrep ,fgrep
    • sed:stream,editor,文本編輯工具;
    • awk:Linux上的實現(xiàn)gawk ,文本報告生成器典格;
  • grep:Global search REgular expression and Print out the line
    - 作用:文本搜索工具惹苗,根據(jù)用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配搭配的行;
    - 模式:由正則表達式字符及文本字符所編寫的過濾條件件已;
    - 正則表達式REGEXP):由一類特殊字符及文本字符所編寫的模式,其中有些字符不表達字符字面意義元暴,而表示控制或通配的功能篷扩;
  • 正則表達式分兩類
    • 基本正則表達式;BRE
    • 擴展正則表達式:ERE
    • 這兩類有些元字符式相同的有些是不相同的
    • grep一般的時候只支持基本正則表達式的、
    • 所以我們要用egrep或grep -E 他們才能支持擴展的正則表達式
    • 而fgrep 不支持正則表達式
  • 正則表達式引擎:
    • 如grep ,sed,awk,他們都支持正則表達式

    • 但是他們所匹配時候的算法也就式引擎各不相同

    • 或者是有細微差別

    • grep使用格式

      • grep [OPTIONS] PATTERN [FILE...]
    • 選項:

      • -- color=auto:對匹配到的文本著色顯示;
      • -v 顯示不能夠被pattern匹配到的行茉盏;
      • -i 忽略字符大小寫
      • -o 僅顯示匹配到的字符串
      • -q 靜默模式鉴未,不輸出任何信息:(可以用echo $? 來查看)
      • -A #:after,后#行
      • -B #:before,前#行
      • -C #:context ,前后各#行
      • -E:使用(ERE)擴展正則表達式

基本正則表達式

  • 字符匹配

  • .:任意單個字符

  • [ ] :范圍內(nèi)的任意單個字符

  • [^ ]: 范圍外的單個字符

  • 次數(shù)匹配

  • *:任意長度的任意字符

  • \? :匹配其前面的字符0或1次:即前面的可有可無

  • \+ : 匹配其前面的字符至少1次

  • \{m\}: 匹配前面的字符m次

  • \{m.n\} :匹配前面的字符至少m次,至多n次

  • \{0,n\} : 匹配前面的字符至多n次:可以沒有

  • \{m,\}: 匹配前面的字符至少m次

  • 位置錨定

    • $ :錨定行尾:模式的最右側(cè)

    • ^:錨定行首:用于模式的最左側(cè)

    • ^PATTERN$: 用于模式匹配整行:

    • ^$空行:

    • \<,\b :詞首錨定:用于單詞模式的左側(cè):

    • \>,\b :詞尾錨定:用于單詞的右側(cè)
      -\<PATTERN\>: 匹配正則單詞

      • 分組
    • \(\) :\(\) 將一個或多個字符捆綁在一起鸠姨,當作一個整體進行處理铜秆,如:(root)+

    • 后向引用 \1,\2,\3......

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

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

    • \1:從左側(cè)起连茧,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符

    • 如:(ab+(xy)*);

    • \1:ab+(xy)*

    • \2:xy

egrep及擴展的正則表達式

grep = grep -E

  • grep [OPTIONS] PATTERN [FILE...]\
  • 擴展正則表達式的元字符:
    • 字符匹配
  • .:匹配單個字符
  • [ ]:范圍之外
  • [^]:范圍之內(nèi)
  • 次數(shù)匹配
  • *:
  • ?:0或多次:
  • {m}:匹配m次
  • {m/n}:至少m,至多n次
  • 錨定
  • ^ :錨定行首
  • $:錨定行尾
  • <,\b:詞首錨定
  • >,\b:詞尾錨定
  • 分組:
    ( )
    后向引用:\1,\2,.......
    或者:
    a|b
    c|cat: C或cat

練習:
1,顯示當前系統(tǒng)root,centos或user1用戶的默認shell和UID:
答案:grep -E "^(root|centos|user1)>" /etc/passwd|cut-d: -f1,3,7
2巍糯,找出/etc/rc.d/init.d/functions文件(centos6)中某單詞后面跟一個小括號的行
答案“grep -E -o "[_[:alpha:]]+() /etc/rc.d/init.d/functiosns"
3啸驯,使用echo 輸出一絕對路徑,使用egrep取出其基名:
答案:echo "/mnt/sdc" | grep -E -o "[^/]+/?$|cut-d”/" -f1
4祟峦,找出ifconfig命令結(jié)果中1-255之間的數(shù)值:

5罚斗,找出ifconfig命令結(jié)果中的ip地址

bash的基礎(chǔ)特性

  • 變量類型:

  • 數(shù)據(jù)存儲格式,存儲空間大小,參與運算種類:

  • 字符型宅楞、

  • 數(shù)值型

  • 他們分為整型和浮點型

  • 強類型:定義變量時必須指定類型针姿,參與運算必須符合類型要求,調(diào)用未聲明的變量會產(chǎn)生錯誤

  • 弱類型 :無須指定類型厌衙,默認均為字符型:參與運算會自動進行隱式類型轉(zhuǎn)換,變量無效事先定義可直接調(diào)用

  • bash就式弱類型的編程語言

  • bash中的變量種類:

  • 根據(jù)變量的生效范圍等標準:

  • 本地變量:生效范圍為當前shell進程,對當前shell之外的其他shell進程距淫,包括當前shell的子shell進程均無效

  • 環(huán)境變量:生效范圍為當前shell進程及子shell

  • 局部變量:生效范圍為當前shell進程中某代碼片段(通常指函數(shù))

  • 位置變量:$1,$2,........來表示,用于讓腳本在腳本代碼中調(diào)用通過命令行傳遞給他的參數(shù)

  • 特殊變量$?,$0``$*,$#,#@

  • pstree進程樹

本地變量:

   - 變量賦值:name=`value`
   - 可以使用引用:
   - value:
       (1)可以式直接字符串:name="username"
       (2)變量引用:name="$username"
       (3)命令引用:name=COMMAND`,name=$(COMMAND)
   - 變量引用:${name},或-$name
   - "  ":弱引用迅箩,其中的變量引用會被替換為變量值
   - ·· :強引用溉愁,其中的變量引用不會被替換為變量值,而保持原字符串:
  • 顯示已定義的所有變量set命令
  • 銷毀變量 unset name 命令

環(huán)境變量

  • 變量聲明饲趋,賦值:
    • export name=VALUE
    • declare -x name=VALUE
    • 變量引用:$name,${name}
    • 顯示所有環(huán)境變量:
    • export
    • env
    • printenv
    • 銷毀:
    • unset name

bash由許多內(nèi)建的環(huán)境變量:PATH,SHELL,UID,HISTSIZE,HOME,PWD,OLD,PS1,HISTFILE

變量命名法則:

1拐揭,不能使用程序中的關(guān)鍵字或保留字:if ,for 等等
2奕塑,只能使用數(shù)字堂污,字面及下劃線,且不能以數(shù)字開頭龄砰;
3盟猖,盡量做到見名知義讨衣,

  • 只讀變量:
  • readonly name
  • declare -r name

位置變量

  • 位置變量主要在腳本代碼中調(diào)用通過命令行傳遞給腳本的參數(shù)
  • $1,$2......對應調(diào)用第1.第2等參數(shù):$0命令本身:shift[n]
  • $*:傳遞給腳本的所有參數(shù)當做一個字符串
  • $@:傳遞給腳本的所有參數(shù)每一個參數(shù)當做一個獨立的字符串
  • $#:傳遞給腳本的參數(shù)的個數(shù):
元字符 定義
^ 行首
$ 行尾
. 任意單一字符
[ ] [ ]范圍內(nèi)的任意單一字符
[^ ] 除[ ^] 內(nèi)的任意單一字符
* *前面字符重復不確定次數(shù)
+ +前面字符重復一次以上不確定次數(shù)
? ?前面字符重復0或1次
\ 轉(zhuǎn)義符
.* 任意長度字符
{ n} 前面字符重復n次
{n,} 前面字符重復n次以上
元字符 定義
[:alnum:] 字母和數(shù)字
[:alpha:] 代表任何英文大小寫字符,亦即 A-Z, a-z
[:lower:] 小寫字母
[:upper:] 大寫字母
[:blank:] 水平空白字符(空格和制表符)
[:space:] 所有水平和垂直的空白字符(比[:blank:]包含的范圍廣)
[:cntrl:] 不可打印的控制字符(退格式镐、刪除反镇、警鈴...)
[:digit:] 十進制數(shù)字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 標點符號
[:xdigit:] 十六進制數(shù)字
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市娘汞,隨后出現(xiàn)的幾起案子歹茶,更是在濱河造成了極大的恐慌,老刑警劉巖你弦,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件惊豺,死亡現(xiàn)場離奇詭異,居然都是意外死亡禽作,警方通過查閱死者的電腦和手機尸昧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來旷偿,“玉大人烹俗,你說我怎么就攤上這事±晖保” “怎么了衷蜓?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長尘喝。 經(jīng)常有香客問我,道長斋陪,這世上最難降的妖魔是什么朽褪? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮无虚,結(jié)果婚禮上缔赠,老公的妹妹穿的比我還像新娘。我一直安慰自己友题,他們只是感情好嗤堰,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著度宦,像睡著了一般踢匣。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上戈抄,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天离唬,我揣著相機與錄音,去河邊找鬼划鸽。 笑死输莺,一個胖子當著我的面吹牛戚哎,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嫂用,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼型凳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了嘱函?” 一聲冷哼從身側(cè)響起啰脚,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎实夹,沒想到半個月后橄浓,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體逊抡,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡存崖,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惭载。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缴淋。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡准给,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出重抖,到底是詐尸還是另有隱情露氮,我是刑警寧澤,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布钟沛,位于F島的核電站畔规,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏恨统。R本人自食惡果不足惜叁扫,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望畜埋。 院中可真熱鬧莫绣,春花似錦、人聲如沸悠鞍。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽咖祭。三九已至掩宜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間心肪,已是汗流浹背锭亏。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留硬鞍,地道東北人慧瘤。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓戴已,卻偏偏與公主長得像,于是被迫代替她去往敵國和親锅减。 傳聞我的和親對象是個殘疾皇子糖儡,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

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

  • 概念 正則表達式每瞒,又稱正規(guī)表示式金闽、正規(guī)表示法、正規(guī)表達式剿骨、規(guī)則表達式代芜、常規(guī)表示法(英語:Regular Expre...
    dxldeng閱讀 2,468評論 0 2
  • Linux文件處理三劍客 grep : 文本過濾工具支持基礎(chǔ)正則表達式-E 支持擴展正則表達式-F 支持快遞過濾(...
    魏鎮(zhèn)坪閱讀 686評論 0 1
  • 初衷:看了很多視頻、文章浓利,最后卻通通忘記了挤庇,別人的知識依舊是別人的,自己卻什么都沒獲得贷掖。此系列文章旨在加深自己的印...
    DCbryant閱讀 3,993評論 0 20
  • 我一直相信,現(xiàn)在的你做了些什么屠升,總會在未來的某個時候得到應證潮改。記得一個學姐對我講了這樣一句話:現(xiàn)在你付出了多少...
    小滿吶閱讀 198評論 0 0
  • 從注會考試結(jié)束每天都在看書,或一個小時腹暖,或兩個小時。今年報了會計財管兩本翰萨,因為農(nóng)行考試只去考了財管脏答。財管今年考的真...
    Lolaliu閱讀 209評論 0 0