1、Linux上文本處理三劍客git
grep:文本過濾(模式:pattern)工具;正則表達式
sed:文本編輯工具;
算法
awk:Linux上的實現gawk,文本報告生成器;
express
2、grepvim
grep:Global search REgular expression and Print out the line,是一款文本過濾(模式:pattern)工具。ide
做用:文本搜索工具,根據用戶指定的「模式」對目標文本逐行進行匹配檢查;打印匹配到的行;工具
模式:由正則表達式字符及文本字符所編寫的過濾條件。
spa
grep語法:
blog
grep [OPTIONS] [PATTERN] [FILE...]
ci
eg1:
eg2:
eg3:
eg4:
OPTIONS:
--color=auto: 對匹配到的文本着色顯示;
-v: 顯示不可以被pattern匹配到的行;
-i: 忽略字符大小寫;
-n:顯示匹配的行號;
-c: 統計匹配的行數;
-o: 僅顯示匹配到的字符串;
-q: 靜默模式,不輸出任何信息;
-A #: after, 後#行;
-B #: before, 前#行;
-C #:context, 先後各#行;
-e:實現多個選項間的邏輯or關係;
grep –e ‘cat ’ -e ‘dog’ file
-w:整行匹配整個單詞;
-E:使用ERE;
示例:
eg1:匹配除了root之外的全部行
eg2:
eg3:
eg4:
eg5:
eg6:
eg7:
eg8:
eg9:
eg10:
eg11:
3、正則表達式
3.1 正則表達式REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能;
3.2 正則表達式分爲兩類:
3.2.1 基本正則表達式:BRE
3.2.2 擴展正則表達式:ERE
3.3 grep工具支持基本的正則表達式,egrep支持擴展的正則表達式,而且grep的-E選項其實就是egrep,fgrep不支持正則表達式搜索;
3.4 正則表達式引擎:
3.4.1 採用不一樣算法,檢查處理正則表達式的軟件模塊;
3.4.2 PCRE(PerlCompatible Regular Expressions);
3.5 元字符分類:字符匹配、匹配次數、位置錨定、分組;
3.6 正則表達式詳細使用幫助文檔:man 7 regex;
4、基本正則表達式元字符
字符匹配:
. :匹配任意單個字符;
[] :匹配指定範圍內的任意單個字符
[^] :匹配指定範圍外的任意單個字符
[:alnum:]全部的字母和數字
[:upper:] 全部的大寫字母
[:lower:] 全部的小寫字母
[:alpha:] 全部的字母(不區分大小寫)
[:space:] 全部空白字符
[:cntrl:] 不可打印的控制字符(退格、刪除、警鈴...)
[:digit:] 全部的數字
[:xdigit:]十六進制數字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 全部的標點符號
eg1:
eg2:
eg3:
次數匹配:用在要指定次數的字符後面,用於指定前面的字符要出現的次數
*:匹配前面的字符任意次,包括0次
貪婪模式:儘量長的匹配
.*:任意長度的任意字符
\:轉義符
\?:匹配其前面的字符0或1次
\+:匹配其前面的字符至少1次
\{n\}:匹配前面的字符n次
\{m,n\}:匹配前面的字符至少m次,至多n次
\{,n\}:匹配前面的字符至多n次
\{n,\}:匹配前面的字符至少n次
eg1:(vim f3,在f3文件裏添加如下內容,如圖所示)
eg2:
eg3:
eg4:
eg5:
eg6:
eg7:
位置錨定:對特定的位置進行定位
^:行首錨定,用於模式的最左側
$:行尾錨定,用於模式的最右側
^PATTERN$: 用於模式匹配整行
^$: 空行,不含有空白字符的行;
^[[:space:]]*$ :空白行,含有空白字符的行(空格和tab),匹配的時候包含空行;
\< 或 \b:詞首錨定,用於單詞模式的左側
\> 或 \b:詞尾錨定;用於單詞模式的右側
\<PATTERN\>:匹配整個單詞
eg1:
eg2:
eg3:
eg4:
eg5:
eg6:
eg7:
eg8:
分組
分組是指將一個或多個字符捆綁在一塊兒,當作一個總體進行處理,其符號爲:\(\);例如:\(root\)\+;
分組括號中的模式匹配到的內容會被正則表達式引擎記錄於內部的變量中,這些變量的命名方式爲: \1, \2, \3, ... ;
\1: 從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符;
實例:\(string1\+\(string2\)*\)
\1: string1\+\(string2\)*
\2: string2
後向引用:引用前面的分組括號中的模式所匹配字符(而非模式自己)
eg1:vim f1,添加如下內容,如圖所示
eg2:vim f2,添加如下內容
5、egrep及擴展的正則表達式
egrep=grep -E;
格式:egrep [OPTIONS] PATTERN [FILE...]
eg1:
6、擴展正則表達式元字符
字符匹配
. 任意單個字符;
[] 指定範圍的字符;
[^] 不在指定範圍的字符;
次數匹配
*:匹配前面字符任意次;
.*:任意長度任意字符;
?: 0次或1次;
+:至少一次;
{m}:精確匹配m次;
{m,n}:至少m次,至多n次;
{m,}:至少m次;
{,n}:至多n次;
位置錨定
^ :行首;
$ :行尾;
\<, \b :語首;
\>, \b :語尾 ;
分組
符號:()
後向引用:\1, \2,...
或者:
a|b:a或b;
C|cat: C或cat;
(C|c)at:Cat或cat;