標籤:
先說明語系對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