grep及正則表達式

grep

  • Linux上文本出來三劍客
    • grep:文本過濾(模式:pattern)工具;
    • grep ,egrep ,fgrep
    • sed:stream,editor,文本編輯工具;
    • awk:Linux上的實現gawk ,文本報告生成器;
  • grep:Global search REgular expression and Print out the line
    - 作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配搭配的行;
    - 模式:由正則表達式字符及文本字符所編寫的過濾條件;
    - 正則表達式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)擴展正則表達式

基本正則表達式

  • 字符匹配

  • .:任意單個字符

  • [ ] :范圍內的任意單個字符

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

  • 次數匹配

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

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

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

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

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

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

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

  • 位置錨定

    • $ :錨定行尾:模式的最右側

    • ^:錨定行首:用于模式的最左側

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

    • ^$空行:

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

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

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

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

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

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

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

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

    • \1:ab+(xy)*

    • \2:xy

egrep及擴展的正則表達式

grep = grep -E

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

練習:
1,顯示當前系統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命令結果中1-255之間的數值:

5,找出ifconfig命令結果中的ip地址

bash的基礎特性

  • 變量類型:

  • 數據存儲格式,存儲空間大小,參與運算種類:

  • 字符型、

  • 數值型

  • 他們分為整型和浮點型

  • 強類型:定義變量時必須指定類型,參與運算必須符合類型要求,調用未聲明的變量會產生錯誤

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

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

  • bash中的變量種類:

  • 根據變量的生效范圍等標準:

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

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

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

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

  • 特殊變量$?,$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由許多內建的環(huán)境變量:PATH,SHELL,UID,HISTSIZE,HOME,PWD,OLD,PS1,HISTFILE

變量命名法則:

1,不能使用程序中的關鍵字或保留字:if ,for 等等
2,只能使用數字,字面及下劃線,且不能以數字開頭;
3,盡量做到見名知義,

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

位置變量

  • 位置變量主要在腳本代碼中調用通過命令行傳遞給腳本的參數
  • $1,$2......對應調用第1.第2等參數:$0命令本身:shift[n]
  • $*:傳遞給腳本的所有參數當做一個字符串
  • $@:傳遞給腳本的所有參數每一個參數當做一個獨立的字符串
  • $#:傳遞給腳本的參數的個數:
元字符 定義
^ 行首
$ 行尾
. 任意單一字符
[ ] [ ]范圍內的任意單一字符
[^ ] 除[ ^] 內的任意單一字符
* *前面字符重復不確定次數
+ +前面字符重復一次以上不確定次數
? ?前面字符重復0或1次
\ 轉義符
.* 任意長度字符
{ n} 前面字符重復n次
{n,} 前面字符重復n次以上
元字符 定義
[:alnum:] 字母和數字
[:alpha:] 代表任何英文大小寫字符,亦即 A-Z, a-z
[:lower:] 小寫字母
[:upper:] 大寫字母
[:blank:] 水平空白字符(空格和制表符)
[:space:] 所有水平和垂直的空白字符(比[:blank:]包含的范圍廣)
[:cntrl:] 不可打印的控制字符(退格、刪除、警鈴...)
[:digit:] 十進制數字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 標點符號
[:xdigit:] 十六進制數字
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,836評論 6 540
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 99,275評論 3 428
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,904評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,633評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,368評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 55,736評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,740評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,919評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 49,481評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,235評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,427評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,968評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 44,656評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,055評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,348評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,160評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,380評論 2 379

推薦閱讀更多精彩內容

  • 概念 正則表達式,又稱正規(guī)表示式、正規(guī)表示法、正規(guī)表達式、規(guī)則表達式、常規(guī)表示法(英語:Regular Expre...
    dxldeng閱讀 2,517評論 0 2
  • Linux文件處理三劍客 grep : 文本過濾工具支持基礎正則表達式-E 支持擴展正則表達式-F 支持快遞過濾(...
    魏鎮(zhèn)坪閱讀 698評論 0 1
  • 初衷:看了很多視頻、文章,最后卻通通忘記了,別人的知識依舊是別人的,自己卻什么都沒獲得。此系列文章旨在加深自己的印...
    DCbryant閱讀 4,042評論 0 20
  • 我一直相信,現在的你做了些什么,總會在未來的某個時候得到應證。記得一個學姐對我講了這樣一句話:現在你付出了多少...
    小滿吶閱讀 206評論 0 0
  • 從注會考試結束每天都在看書,或一個小時,或兩個小時。今年報了會計財管兩本,因為農行考試只去考了財管。財管今年考的真...
    Lolaliu閱讀 216評論 0 0