文本處理三劍客:git
grep系:grep 、egrep 、fgrep ,文本搜索工具,基於「PATTERN"對於給定的文本進行模糊搜索,grep系默認工做於貪婪模式下。正則表達式
sed:Stream EDitor,流編輯器,行編輯器,文本編輯工具;算法
awk:gawk——GUN awk,文本格式化工具,文本報告生成器,文本處理的編程語言;編程
grep系:app
grep:利用正則表達式進行全局搜索並將匹配的行顯示出來;dom
grep [OPTIONS] PATTERN [FILE.....]編程語言
PATTERN:過濾條件,是由正則表達式元字符以及沒有特殊含義的文本字符組成的;編輯器
正則表達式的元字符:ide
會被正則表達式引擎解釋爲特殊含義;工具
pcre——perl語言的正則表達式引擎;最完整的正則表達式引擎
基本的正則表達式:BRE
擴展的正則表達式:ERE
grep默認僅支持基本正則表達式;
egrep默認僅支持擴展正則表達式;
fgrep默認不開啓正則表達式引擎;
文本字符:
只具有字符表面含義的那些字符;
經常使用選項:
-i,--ignore-case:忽略文本字符的大小寫;
-v,--invert-match:反向匹配;最終顯示的結果是PATTERN不能成功匹配的行;
-c,--count:計數,統計匹配PATTERN的全部的行數;
-o,--only-matching:關閉貪婪模式,僅顯示PATTERN可以匹配的內容。
-q,--quiet,--silent:安靜模式,不輸出任何結果
--color=auto將結果高亮顯示。。
-E,至關於egrep
-F,--fixed-strings,--fixed-regexp:grep -F至關於fgrep
-G,至關於grep 基本的正則表達式
-P,--Perl-regexp:使用PCRE引擎。
-A num:在顯示匹配PATTERN的行的同時顯示其前多少行內容,
-B num:在顯示匹配PATTERN的行的同時顯示其後多少行內容;
-C num:在顯示匹配PATTERN的行的同時顯示其先後多少行內容;
PATTERN:
正則表達式元字符:
基本的正則表達式元字符:
GLOBBING-----簡化版的正則表達式:[] ? *
字符匹配:
.:匹配任意單個字符
下列全部的字符集均可以放置在[]之中用於匹配單個字符。
[]:匹配指定範圍內的任意單個字符;
[^]:匹配指定範圍之外的任意單個字符;
[:lower:]
[:upper:]
[:digit:]
[:alpha:]
[:space:]
[:alnum:]
[:punct:]
[:blank:]
[:xdigit:]:全部的十六進制數字;
a-z:全部的小寫字母
A-Z:全部的大寫字母
0-9:標識全部的十進制數字
次數匹配:該類字符以前的那個字符能夠出現的次數;
*:其前面的字符能夠出現任意次(0次,1次或屢次);
\?:其前面的字符無關緊要(0次或1次)。
\+:其前面的字符至少出現一次(一次或屢次)
\{m\}:其前面的字符必須出現m次。
\{m,n\}:其前面的字符至少出現m次最多出現n次。(m<n)
\{0,n\}:其前面的字符至少出現0次,至多出現n次;
\{m,\}:其前面的字符至少出現m次,×××。
在正則表達式中,表示任意長度任意字符的方式:.*
位置錨定字符:
行錨定:
行首錨定:^
行尾錨定:$
字錨定:
字首錨定:\<或者\b
字尾錨定:\>或者\b
\b:舊版本中的錨定方法,因此建議不使用;
對於正則表達式引擎來講,字是由非特殊字符組成的連續字符串;
分組與引用字符:
\(PATTERN\):將PATTERN所匹配到的全部字符當作一個不可分割的總體來處理。
在正則表達式引擎中有一系列的內置變量,這些變量會保存全部全部分組內的字符信息,用於後向引用;這些變量依次是:\1,\2,\3.......
pattern1\(pattern2\)pattern3\(pattern4\(pattern5\)\)
\1:pattern2 第一組小括號中的pattern匹配到的字符;
\2:pattern4 第二組小括號中的pattern匹配到的字符;
\3:pattern5
或:
\|
注意:或字符將其左右兩邊的字符當作總體對待;
A\|americam :A 或 american
默認狀況下,grep命令後面只容許一個pattern;
若是想要在一次grep所搜過程當中寫多個pattern,則須要使用-e選項,每一個PATTERN前面加一個-e
將所須要的PATTERN寫入到一個文件中,保證每行只有一個PATTERN,咱們就可使用-f file方式來實現多PATTERN選項。
egrep:
egrep [OPTIONS] PATTERN [FILE....]
擴展的正則表達式元字符:
字符匹配:
.
[]
[^]
次數匹配:
*
?
+
{m}
{m,n}
{m,}
{0,n}
位置錨定:
^
$
\<,\b
\>,\b
分組和引用:
()
\1,\2,\3...
或:
|
fgrep:PATTERN中全部的字符都被當作文本字符來處理;
其餘的文本處理命令:
wc:
wc [OPTION] ... [FILE]...
-l:只顯示行數
-w:只顯示字數
-c:只顯示字符數
cut:(剪輯)
可以被cut命令修改的文件通常都是具備必定結構或格式的文本文檔。
cut OPTION... [FILE]...
-d, --delimiter=DELIM :指定在實施修剪操做時所依賴的分隔符,默認是空白符;
-f, --fields=LIST :根據定義的分隔符來指定字段的編號。
地址定界使用方法:
#:選擇被指定的單個字段
#,#:離散的多個被指定的單個字段
#-#:連續的多個被指定的字段
--output-delimiter=STRING :指定輸出分隔符
awk:
awk -F 「DELIMITER」 ‘[/PATTERN/]{print $1,$2.$3...$NF}’ FILE...
-F 「DELIMITER」:指定字段分隔符,默認爲空白字符;
$1,$2,$3....,$NF:根據字段分隔符切割出來的文本片斷都存放在相應的內部變量中;
sort:sort lines of text files ,將文本文件按行繼續排序,默認排序規則是按ASCII表中的字符順序進行,這個排序標準可修改。
-r,--reverse:逆向排序
-R,--random-sort:隨機排序,這種隨機算法比較簡陋
-u, --unique:重複出現的行只顯示一行,
-n, --numeric-sort:按照數字數值大小排序。
-t, --field-separator=SEP:指定字段分隔符
-k, --key=KEYDEF:指明根據哪一個關鍵字段進行排序,通常和-t同時使用。
uniq:report or omit repeated lines
-d, --repeated:只顯示重複出現的行,並且重複出現的行只顯示一行。。
-u, --unique:只顯示不重複的行。
-c, --count:在每行之前綴的方式顯示重複行的重複次數;
diff:compare files line by line
同一個文件的不一樣修改版本;打補丁;
patch:apply changes to files
patch [-R] [-i patchfile] [file]