一、抽取文本的工具:less,cat,head,tail,cut
二、分析文本的工具:wc,sort,diff,patch
二、grep及正規表達式
三、egrep擴充正規表達式
一、抽取文本的工具
1)檔案檢視指令:
cat [OPTION]... [FILE]...
-E: 顯示行結束符$
-n: 對顯示出的每一行進行編号
-A:顯示所有控制符
-b:非空行編号
-s:壓縮連續的空行成一行
tac
功能與cat相同,顯示内容為cat的逆序
2)分頁檢視工具
more:分頁檢視檔案
more [OPTIONS...] FILE...
-d: 顯示翻頁及退出提示
less:一頁一頁地檢視檔案或STDIN輸出
檢視時有用的指令包括:
/文本 搜尋 文本
n/N 跳到下一個 or 上一個比對
less 指令是man指令使用的分頁器
3)顯示文本前或後行内容
head
head [OPTION]... [FILE]...
-c #: 指定擷取前#位元組
-n #: 指定擷取前#行
-#: 指定行數(同-n#)
tail
tail [OPTION]... [FILE]...
-c #: 指定擷取後#位元組
-n #: 指定擷取後#行
-#:指定行數
-f: 跟蹤顯示檔案新追加的内容,常用日志監控
4)按列抽取文本cut和合并檔案paste
cut [OPTION]... [FILE]...
-d DELIMITER: 指明分隔符,預設tab(-d和分隔符之間可以沒有空格)
-f FILEDS:
#: 第#個字段
#,#[,#]:離散的多個字段,例如1,3,6
#-#:連續的多個字段, 例如1-6
混合使用:1-3,7
-c 按字元切割 --output-delimiter=STRING指定輸出分隔符
cut -d: -f1 /etc/passwd
cat /etc/passwd | cut -d: -f7
cut -c2-5 /usr/share/dict/words
paste 合并兩個檔案同行号的列到一行
-d 分隔符:指定分隔符,預設用TAB
-s : 所有行合成一行顯示
paste f1 f2
paste -s f1 f2
二、文本分析工具
1)文本資料統計
wc:計數行總數、單詞總數、字元總數(和位元組總數),可以對檔案或STDIN中的資料運作
wc story.txt
39 237 1901 story.txt
行數 字數 字元數
-l 隻計數行數
-w 隻計數單詞總數
-c 隻計數位元組總數
-m 隻計數字元總數
2)文本排序
sort:把整理過的文本顯示在STDOUT(預設按照字元大小排序) 不改變原始檔案
sort [options] file(s)
-r 執行反方向(由上至下)整理
-n 執行按數值大小整理
-f 選項忽略(fold)字元串中的字元大小寫
-u 選項(獨特,unique)删除輸出中的重複行
-t c 選項使用c做為字段界定符
-k X 選項按照使用c字元分隔的X列來整理 能夠使用多次
3)除重
uniq:從輸入中删除重複的前後相接的行
uniq [OPTION]... [FILE]...
-c: 顯示每行重複出現的次數
-d: 僅顯示重複過的行
-u: 僅顯示不曾重複的行:連續且完全相同方為重複
常和sort 指令一起配合使用: sort userlist.txt | uniq -c
4)比較檔案
diff:逐行比較兩個檔案之間的差別,
diff [OPTION]... [OLDFILE] [NEWFILE] 顯示oldfile與newfile相比的不同和措施
diff foo.conf-broken foo.conf-works
5c5 (注明第5行有差別)
< use_widgets = no
---
> use_widgets = yes
-u 顯示變化行的上下文,預設3行(适用于更新檔檔案)
diff /PATH/TO/OLDFILE /PATH/TO/NEWFILE > /PATH/TO/PATCH_FILE
diff還可用于比較兩個不同目錄,顯示其中每個檔案的差别
patch:複制對檔案改變(向檔案打更新檔)
patch -i /PATH/TO/PATCH_FILE /PATH/TO/OLDFILE
patch /PATH/TO/OLDFILE < /PATH/TO/PATCH_FILE
-b 選項來自動備份改變了的檔案
三、grep及正規表達式
1)Linux上文本處理三劍客
grep:文本過濾(模式:pattern)工具
grep, egrep(支援擴充正規表達式), fgrep(不支援正規表達式搜尋)
sed:stream editor,文本編輯工具
awk:Linux上的實作gawk,文本報告生成器
2)grep: Global search REgular expression and Print out the line
作用::文本搜尋工具,根據使用者指定的“模式”對目标文 本逐行進行比對檢查;列印比對到的行; 模式:由正規表達式字元及文本字元所編寫的過濾條件
grep [OPTIONS] PATTERN [FILE...]
grep root /etc/passwd
grep [OPTIONS] PATTERN [FILE...] grep root /etc/passwd
指令選項:
--color=auto: 對比對到的文本着色顯示
-v: 顯示不能夠被pattern比對到的行
-i: 忽略字元大小寫
-n:顯示比對的行号
-c: 統計比對的行數
-o: 僅顯示比對到的字元串
-q: 靜默模式,不輸出任何資訊 (配合echo $? 可用于寫腳本)
-A #:after, 同時顯示後#行
-B #: before, 前#行
-C #:context, 前後各#行
-e:實作多個選項間的邏輯or關系
grep –e ‘cat ’ -e ‘dog’ file
-w:整行比對整個單詞
-E:使用ERE擴充的正規表達式
3)正規表達式
REGEXP:由一類特殊字元及文本字元所編寫的模式,其中有 些字元(元字元)不表示字元字面意義,而表示控制或通配的功能
程式支援:grep, vim, less,nginx等
分兩類: 基本正規表達式:BRE 擴充正規表達式:ERE
元字元分類:字元比對、比對次數、位置錨定、分組
4)基本正規表達式
字元比對
. : 比對任意單個字元
[] : 比對指定範圍内的任意單個字元
[^] :比對指定範圍外的任意單個字元
[:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:] 、[:punct:]、[:space:]
比對次數(預設工作于貪婪模式:盡可能長的比對)
用在要指定次數的字元後面,用于指定前面的字 符要出現的次數
*:比對前面的字元任意次,包括0次
.*:任意長度的任意字元
\?:比對其前面的字元0或1次
\+:比對其前面的字元至少1次
\{m\}:比對前面的字元m次
\{m,n\}:比對前面的字元至少m次,至多n次
\{0,n\}:比對前面的字元至多n次
\{m,\}:比對前面的字元至少m次
位置錨定:定位出現的位置
^:行首錨定,用于模式的最左側(^root 以root開頭的行)
$:行尾錨定,用于模式的最右側(root$ 以root結尾的行)
^PATTERN$: 用于模式比對整行(整行隻有此PATTERN)
^$: 空行(空白字元也不包括)
^[[:space:]]*$ :空白行(空行或包含空白字元的行)
單詞:非特殊字元組成的連續字元(字元串)(包括數字,不包含特殊字元)
\< 或 \b:詞首錨定,用于單詞模式的左側
\> 或 \b:詞尾錨定;用于單詞模式的右側
\<PATTERN\>:比對整個單詞
分組及引用
分組:\( \):将一個或多個字元捆綁在一起,當作一個整體進 行處理,如:\(root\)\+
注:分組括号中的模式比對到的内容會被正規表達式引擎記錄 于内部的變量中,這些變量的命名方式為: \1, \2, \3, ...
\1: 從左側起,第一個左括号以及與之比對右括号之間 的模式所比對到的字元
執行個體: \(string1\+\(string2\)*\)
\1: string1\+\(string2\)*
\2: string2
後向引用:引用前面的分組括号中的模式所比對字元(而 非模式本身)
四、egrp及擴充的正規表達式
1)egrep
egrep = grep -E
egrep [OPTIONS] PATTERN [FILE...]
2)擴充正規表達式
字元比對(同基本正規表達式)
次數比對
*:比對前面字元任意次
?: 0或1次
+:1次或多次
{m}:比對m次
{m,n}:至少m,至多n次
{0,n} {m,}
位置錨定(同基本正規表達式)
分組
()
後向引用:\1, \2, .....
或者
a|b
C|cat: C或cat
(C|c)at:Cat或cat
3)fgrep
不支援正規表達式元字元:當無需用到元字元去編寫模式時,使用fgrep更好