本文主要說一些正則的基本語法,並且結合linux的各種小工具(egrep、sed、awk)列舉一些使用例項。
一、基本語法
正則的基本語法就大概是下面這些,但是正則遠不止這些,甚至可以寫一本書,當然了,我們這裡只列舉一些簡單的
用法,這些已經可以解決大部分實際問題了。
1、字元類 字元
含義舉例
.
匹配任意乙個字元
abc.
可 以匹配abcd
、abc9
等
匹配括號中的任意乙個字元
[abc]d
可以匹配ad
、bd
或cd
-
用在中,表示字元範圍
[0-9a-fa-f]
可以匹配一位十六進製制數字
^
如果位於的開頭,則匹配除去括號中字元之外的一切字元
[^xy]
匹配除xy
之外的任一字元,因此[^xy]1
可以 匹配a1
、b1
但不匹配x1
、y1
[[:***:]]
grep
工 具預定義的一些命名字元類
[[:alpha:]]
匹配乙個字母,[[:digit:]]
匹配乙個數字
2、數量限定符 字元
含義舉例
?
緊跟在它前面的單元匹配零次或一次
[0-9]?/.[0-9]
匹配0.0
、2.3
、.5
等,由於.
在正規表示式中是乙個特殊字元,所以需要用/
轉 義一下,取字面值
+
緊跟在它前面的單元匹配一次或多次
[a-za-z0-9.-_]+@[a-za-z0-9.-_]+/.[a-za-z0-9.-_]匹配email
*
緊跟在它前面的單元匹配零次或多次
[0-9][0-9]*
匹配至少一位數字,等價於[0-9]+
,[a-za-z_]+[a-za-z_0-9]*
匹 配c語言的識別符號
緊跟在它前 面的單元應精確匹配
n次
[1-9][0-9]
匹 配從100
到999
的整數
緊跟在它前面的單元至少要匹配n次
[1-9][0-9]
匹配三位以上(含三位)的整數
緊跟在它前面的單元至多匹配m次
[0-9]和[0-9]?意義一樣,
緊跟在它前面的單元至少匹配n次,至多匹配m次
[0-9]/.[0-9]/.[0-9]/.[0-9]/.用於匹配ip位址
3、位置限定符 字元
含義舉例
^
匹配行首的位置
^content匹配以content開頭的行
$
匹配行末的位置
:$匹配以:結尾的行,^$匹配空行
/<
匹配單詞開頭的位 置
/
/>匹 配單詞結尾的位置
p/>
匹配leap ...
,但不匹配parent
、sleepy
/b
匹 配單詞開頭或結尾的位置
ap/b匹配leap,/ble匹配leap,/bat/b
匹配... at ...
,但不匹配cat
、atexit
、batch
/b
匹配非單詞開頭和結尾的位置
/bat/b
匹配battery
,但不匹配... attend
、hat ...
4、其他特殊字元 字元
含義舉例
/
轉義字元,普通字元轉義為特殊字元,特殊字元轉義為普通字元
普 通字元<
寫成/<
表 示單詞開頭的位置,特殊字元.
寫成/.
以 及/
寫成//
就當作普通字元來 匹配
()
將正規表示式的一部分括起 來組成乙個單元,可以對整個單元使用數量限定符
([0-9]/.)[0-9]
匹 配ip位址
|
連線兩個表示式,表示或的關係
n[o-either]可以匹配no或neither
二、小工具
1、grep/egrep
grep
是一種查詢過濾工具,正規表示式在grep
中 用來查詢符合模式的字串。
egrep相當於grep -e,表示採用extended正規表示式語法。grep的正規表示式有basic和 extended兩種規範
上述列舉的正規表示式語法都適用於egrep。而grep的語法則相對簡陋一些,?+(){}|都只是一些匹配字元了。
2、sed
sed意為流編輯器(stream editor),在shell指令碼和makefile中作為過濾器使用非常普遍,也就是把前乙個程式的輸出引入sed的輸入,經過一系列編輯命令轉換為另一種格式輸出。sed和vi都源於早期unix的ed工具,所以很多sed命令和vi的末行命令是相同的。
在正常情況下,sed將待處理的行讀入模式空間,指令碼中的命令就一條接著一條的對該行進行處理,直到指令碼執行完畢,然後該行被輸出,模式空間清空;然後重複剛才的動作,檔案中的新的一行被讀入,直到檔案處理完備。
看了很多寫sed的就屬鳥哥寫的最好了,摘錄一下:
不過鳥哥的不是很全,特補充如下:
補充幾個除d、a、i、s、c、p之外不常用的命令:
3、awk
待續。。。。。。。
shell 正規表示式 sed
字串 字串的初值 備用值 變數非空是不可使用 正規表示式 可以配合某工具對文件進行過濾篩選 grep root user 以root開頭的行 grep bash user 以bash結尾的行 grep 0 9 user 篩選出0 9的數字 grep 0 9 user 排除所有0 9的數字 grep ...
sed 正規表示式
如果testfile的內容是 welcome to the world of regexp 現在要去掉所有的html標籤,使輸出結果為 hello world welcome to the world of regexp 怎麼做呢?如果用下面的命令 sed s g testfile 結果是兩個空行,...
sed 常用正規表示式
1.乙個比較實用的正規表示式 匹配html的嵌入 匹配 的嵌入碼 刪除僅由空字元組成的行 sed space d filename 匹配html標籤 例如 從html檔案中剔除html標籤 sed s g space d file.html 例如 要從下列 中去除 及其中包括的 b 4c6c2a65...