Linux基礎Regex:grep,sed

來源:互聯網
上載者:User

標籤:

先說明語系對Regex的影響
    LANG=C:0,1,2,3,4...A,B,C,D...Z a b c d ... z
    LANG=zh_CN:0,1,2,3,4...a A b B c C d D... z Z
因為不同語系用[a-z]篩選的不同,所以出現了特殊符號
[:alnum:]  :  即0-9,a-z,A-Z,英文大小寫字元和數字,
[:alpha:]   :  即a-z,A-Z,任何英文大小寫字元
[:digit:]      :  即0-9,所有數字
[:upper:]   :  即A-Z,所有大寫字元
[:lower:]     :   即a-z,,所有小寫字元
[:space:]   :  任何會產生空白的字元,包括空格,Tab和CR等
[:blank:]    :  空格和tab
[:cntrl:]     : 鍵盤上的控制按鍵,包括C,LF,Tab,Del等
其他參考網上相關資料
現在看不到沒關係,下面有例子

grep的一些進階參數

再11.5中已經討論到了grep的基本用法
grep:分析一行資訊
grep ‘尋找的字串‘ filename
找到的話就列出字串存在的行
grep -i 忽略大小寫
grep -n 順便輸出行號
grep -c 只計算找到的次數,不顯示行
grep -v ‘‘ filename 顯示沒有的行
grep --color=auto ‘‘ filename   關鍵字有特殊顏色

grep -An1 -Bn2 ‘字串’ filename
-A:after,顯示出後續幾行
-B:before,顯示多前幾行
-C:上下個幾行
只要有找到的,都會在其下面或上面都n行

如果選出的沒有顏色
可以自訂個人環境變數
在~/.bashrc中添加 alias grep=‘grep --color=auto‘  再sourc ~/.bashrc

樣本常值內容
regular_express.txt
"Open Source" is a good mechanism to develop programs.
apple is my favorite food.
Football game is not use feet only.
this dress doesn‘t fit me.
However, this dress is about $ 3183 dollars.
GNU is free air not free beer.
Her hair is very beauty.
I can‘t finish the test.
Oh! The soup taste good.
motocycle is cheap than car.
This window is clear.
the symbol ‘*‘ is represented as start.
Oh!   My god!
The gd software is a library for drafting programs.
You are the best is mean you are the no.1.
The world <Happy> is the same as "glad".
I like dog.
google is the best tools for search keyword.
gooooole yes!
go! go! Let‘s go.
#I am Vbird

grep所有用法樣本:(每個例子都會列出-n顯示行數)
a.(反向,不論大小寫)尋找特定字串
    grep -n[v][i] ‘字串‘ 檔案



如果尋找的有特殊字元(.*\{}‘),需要轉義,下面(c)介紹
小數點,星號,反斜線,大括弧,單引號,不包括小括弧(小括弧是可以直接找到的)

b.利用中括弧[]尋找集合字元(就是可能出現的都寫在中括弧中,加^變成不存在的)

尋找不是以g開頭的後面接‘oo‘的字串


剔除小寫字元

我們知道因為語系不同可能會有影響可以使用特殊符號選取





c.任意一個字元. 與重複字元*
    .(小數點): 代表一定有一個任一字元
    *(星號):代表重複(RE,repeat)前一個0到無窮多次的意思,為組合形態
    這裡的*與萬用字元的*是不一樣的,萬用字元中的*是0個或多個字元的意思
g,d中間有兩個字元

尋找兩個o以上的

兩個g之間至少有一個o

.*代表0個或多個字元

找出所有數字

說明的是星號前面不一定是固定的東西,可能是Regex

d.使用行首字元^和行尾字元$
    ^與前面的反向選是不一樣的
    反向選擇字元是在中括弧[]裡面的,
    所有只要看到^在[]中,那麼它就是反選,否則就是行首字元

找出以字元開頭的    

不想要字母開頭的

或者


找出以.結尾的字元
因為是特殊字元,需要用\轉義

注意:windows中的斷行字元判斷是不一樣的,所以可能會出現找不到的問題
具體解決方案以後有時間會更新或者百度上有講解

找出(去除)空白行
    ^$



去除一個檔案中的空白行和注釋
grep -v ‘^$‘ ‘filename‘ | grep -v ‘^#‘
可自己分析

原本共有48行,除去後



e.限定連續RE(重複)字元範圍{n1,n2} (n1,n2出現一個也可以)
    同樣因為{}是逸出字元,需要用\失去特殊意義
找出o出現兩次的





其他特殊字元查詢




sed工具
本身也是一個管道命令,可以分析standard input的,而且sed還可以將資料進行替換,刪除,新增,選取特定行等功能
sed [-nefr] [’動作‘]
參數:
    -n:安靜模式,只有經過sed特殊處理的那一行(或者操作)才會被列出來    
            預設stdin和修改後的資訊都會列印出來,
    -e:直接在命令列模式進行sed的動作編輯
    -f:直接將sed動作寫在一個檔案中,-f filename可以執行filename內的sed動作
    -r:sed動作支援的是擴充型Regex(預設是基礎Regex文法)
    -i:直接修改讀取的檔案內容,而不是由螢幕輸出  (預設是讀取修改後輸出到螢幕,原檔案不會改變)
動作=[n1[,n2]]function
function:
    a:新增,後接字串,會在指定行的下一行插入一行
    c:替換,後接字串,替換n1,n2之間的行
    d:刪除,不加字串
    i:插入,後接字串,再指定行的上一行插入一行        
    p:列印,將某個選擇的資料列印出來,通常與sed -n一起運行
    s:替換,可以直接進行替換工作。通常搭配Regex

以行(hang)為單位的新增(sed ‘-2a str‘)和刪除(sed ‘n1,n2d‘)功能:
                    sed ‘2,5d‘             
                    sed ‘2a Hello World‘  
                    sed ‘2a Hello Word \[Enter] Yes‘




以行為單位的替換(sed ‘n1,n2c str‘)與顯示(sed -n ‘n1,n2p‘)功能
    顯示就像head tail組合功能
                sed ‘2,5c No 2-5 number‘
                sed -n ‘2,5p‘



部分資料的尋找和替換功能(send ‘s/要被替換的字串/新的字串/g‘     刪除sed ‘/字串/d‘)
    要被替換的字串可以是Regex
    sed ‘s/#.*$//g‘ 將注釋行替換為空白行


直接修改檔案內容(有時可用,但重要檔案記得備份)
sed -i  ‘s/../../g‘ filename






Linux基礎Regex:grep,sed

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.