在學習linux中文本搜索是很重要的 對於初學者來說如何快速學會運用正則表達式相當重要的。
文本搜索工具,根據用戶指定的文本搜索模式(搜索條件)對目標進行逐行搜索,顯示能匹配的行。
文本搜索:
grep :基本正則表達式
egrep:擴展正則表達式
fgrep:fast,不支持使用正則表達式
其語法格式: grep [option]...'PATTERN' FILE...
正則表達式:是一類字符所書寫的模式,其中許多字符不表示其字面意義,而是表達控制或通配等能;
元字符:不表示其字面意義,而用於額外功能性描述。
基本正則表達式
1.字符匹配
. | 匹配任意單個字符 |
[] | 匹配指定範圍內的任意單個字符 [0-9],[[:digit:]] [a-z],[[:lower:]] [A-Z],[[:upper:]] [[:space:]] [[:punct:]] [[:alpha:]] [[:alnum:]] |
[^] | 取反 |
2.次數匹配元字符:用於實現指定其前面的字符所能夠出現的次數。
* | 任意長度,它前面的字符可以出現任意次 |
\? | 0次或1次,它前面的字符可有可無的 |
\m | m次,它前的字符要出現m次 |
\{m,n\} | 至少m次,之多n次 |
\{m,\} | 至少m次 |
\{0,n\} | 至多n次 |
.* | 任意長度的任意字符 |
3.位置錨定:
^ | 行首錨定;寫在模式最左側 例如:grep "^r...t" /etc/passwd |
$ | 行尾錨定;寫在模式最右側 例如:grep "r...t$" /etc/passwd |
^$ | 空白行 例如:grep "^$" /etc/passwd | wc -l |
\< | 詞首,出現於單詞左側. 例如: grep "\<r...t" /etc/passwd |
\> | 詞尾,出現於單詞右側 例如 grep "r...t\>" etc/passwd |
4.分組:
\(\) | 分組中的模式匹配到內容,可由正則表達式引擎記憶在內存中,之後可被引用例如:\(ab\)* grep "\(ro\)*" etc/passwd |
\(\)引用 | 有編號:自左而右的左括號,以及與其匹配右括號 例如 \(ab)(x\)y\).*\(mn\) |
\# | 引用第n個括號所匹配到的內容,而非模式本身 例如: \(ab\?c\).*1 正確:abcmnaaa 錯誤:abcmnac abcmnabc acmnac |
5:grep的命令選項
-v | 反向選取 |
-o | 僅顯示匹配的字串,而非字串所在的行 |
-i | 忽略字符大小寫 |
-E | 支持使用擴展正則表達式 |
-A# | 顯示上行 #(變量輸入幾行) |
-B# | 顯示下行 |
-C# | 顯示全部 |