正則表達式(regex)
瞄位: ^和$
^ :匹配一個輸入或一行的開頭,/^a/匹配”an A”,而不匹配”An a”
$ :匹配一個輸入或一行的結尾,/a$/匹配”An a”,而不匹配”an A”
“^The”:表示所有以"The"開始的字符串(“There”,"The cat"等);
“Jerry$”:表示所有以"Jerry"結尾的字符串;
貪婪元字符:+ , * 與?
* :匹配前面元字符0次或多次,/ba*/將匹配b,ba,baa,baaa
+ :匹配前面元字符1次或多次,/ba*/將匹配ba,baa,baaa
? :匹配前面元字符0次或1次,/ba*/將匹配b,ba
多次匹配:
{n} :精確匹配n次;
{n,m} :匹配n-m次;
{n,} :匹配n次以上;
{,n} : 匹配0-n個;
*? 重複任意次,但儘可能少重複
+? 重複1次或更多次,但儘可能少重複
?? 重複0次或1次,但儘可能少重複
{n,m}? 重複n到m次,但儘可能少重複
{n,}? 重複n次以上,但儘可能少重複
或操作符:|
“x|y” :匹配x或y
“hi | hello”:表示一個字符串裏有"hi"或者"hello";
“(b|cd)ef”:表示"bef"或"cdef";
“(a|b)*c”:表示一串"a"“b"混合的字符串後面跟一個"c”;
通用元字符:". "
如果想只匹配點,那麼需要轉義字符 “.” ,匹配其他元字符也一樣,用轉義字符就可以;
'.'可以替代除換行符之外的任何字符;
“a.[0-9]”:表示一個字符串有一個"a"後面跟着一個任意字符和一個數字;
“^.{3}$”:表示有任意三個字符的字符串(長度爲3個字符);
方括號:[ ]
方括號表示某些字符允許在一個字符串中的某一特定位置出現:
“[ab]”:表示一個字符串有一個"a"或"b"(相當於"a|b");
“[a-d]”:表示一個字符串包含小寫的’a’到’d’中的一個(相當於"a|b|c|d"或者"[abcd]");
“^[a-zA-Z]”:表示一個以字母開頭的字符串;
“[0-9]%”:表示一個百分號前有一位的數字;
“,[a-zA-Z0-9]$”:表示一個字符串以一個逗號後面跟着一個字母或數字結束;
你也可以在方括號裏用’‘表示不希望出現的字符,’'應在方括號裏的第一位。(如:"%[^a-zA-Z]%"表示兩個百分號中不應該出現字母)。
字符集
[xyz] :字符集(character set),匹配這個集合中的任一 一個字符(或元字符)
[^xyz] :不匹配這個集合中的任何一個字符
\b :匹配一個單詞的邊界
\B :匹配一個單詞的非邊界
\d :匹配一個字數字符,等同於[0-9]
\D :匹配一個非字數字符,等同於[^0-9]
\n :匹配一個換行符
\r :匹配一個回車符
\s :匹配一個空白字符,包括n,r,f,t,v等
\S :匹配一個非空白字符,等於/[^nfrtv]/
\t :匹配一個製表符
\v :匹配一個重直製表符
\w :匹配字母或數字或下劃線或漢字,等於[a-zA-Z0-9_]
\W :匹配字母或數字或下劃線或漢字以外的字符,等於[^a-zA-Z0-9_]
\x :匹配十六進制數字,等同於[0-9A-Fa-f]。
\X :匹配十六進制數字之外的任意字符,等同於[^0-9A-Fa-f]。
匹配單詞
只匹配單獨的單詞Jerry:”< Jerry \ >“ ,這個只匹配單詞兩邊爲空白(空格、製表等)的單詞,Jerry_Tom這類則匹配不到。
匹配單詞開頭: <
匹配單詞結尾:>
搜索&替換
(搜索)命令: /正則表達式
(替換)命令: s/正則表達式/替換字符串/選項
選項可以是:i 表示不論大小寫都匹配; g 表示匹配當前行中的所有匹配的字符串; d 表示刪除
把所有單詞help或Help都改爲大寫的HELP : %s/[Hh]elp/HELP/g
%表示匹配當前文檔中所有行,你也可以指定部分行 1,20 s/[Hh]elp/HELP/g
使用單個空格替換一個或多個空格:%s/ \+/ /g
刪除所有空行(沒有任何字符,除了一個回車符)
:g/^$/d
:g/^[ tab]*[ tab]*$/d刪除含有某些字符的行:g/ERROR/d
刪除每行的所有的前導空格:%s/^ *//g
在文件中的每一行的開始插入->(或者其它字符):%s/^/->/
在每一行的尾部加上一個句號(或其他字符):%s/$/。/g
刪除以數字開頭的行 : %s/^\d.*$//g
刪除以[a,b,c]開頭的行 : %s/^[a|b|c].*$//g
刪除重複行 : %s/^\(.*\)\n\1$/\1/g
使用\(和\)符號括起正則表達式,即可在後面使用\1、\2等變量來訪問\(和\)中的內容。
例如:交換列表中所有連字符分隔的條目的順序ABC : XYZ:%s/\(.*\):\(.*\)/\2 : \1/g
sed用法
用來直接處理文件
簡單實例:
1、刪除所有空行:sed ‘s/^$/d’ *.txt
2、刪除所有隻包含空格或者製表符的行 : sed ’ s/^[ ]*$/d’ price.txt
3、刪除所有引號 : sed ‘s/"//g’ price.txt