Linux系統上的文件處理工具
我們都知道在計算機中,存在大量的文件,這些文件中包含大量的信息??墒怯行r候,為了工作的效率,我們在茫茫信息中提取出我們所需要的信息,這樣的技能就顯得尤為重要。Linux系統上為我我們提供了多種多樣的文本處理工具,下面我們來簡單說一下。
查看文件內容我們可以使用less命令,cat命令,more命令等等
cat
cat [OPTION]… [FILE]…
-E: 顯示行結束符$
-n: 對顯示出的每一行進行編號
-A:顯示所有控制符
-b:非空行編號
-s:壓縮連續的空行成一行
cat命令是把整個目標文件的內容整個打印出來,如果我們遇到文件非常龐大的情況,我們可以使用less和more來進行查看
less:一頁一頁地查看文件或STDIN輸出
查看時有用的命令包括:
/keyword 關鍵字查詢
n/N跳到下一個or 上一個匹配
less命令其實就是man命令使用的分頁器
more:分頁查看文件
more [OPTIONS…] FILE…
-d: 顯示翻頁及退出提示
如果我們想要顯示文本前或后n行內容
head
head [OPTION]… [FILE]…
-c #: 指定獲取前#字節
-n #: 指定獲取前#行
-#:指定行數
tail
tail
tail [OPTION]… [FILE]…
-c #: 指定獲取后#字節
-n #: 指定獲取后#行
-#:
-f: 跟蹤顯示文件新追加的內容,常用日志監控
如果我們想要在使用-f選項的同時,進行其他工作,可以在最后加上&符號,將其調到后臺運行。
按列抽取文本
cut
cut [OPTION]… [FILE]…
-d DELIMITER: 指明分隔符,默認tab
-f FILEDS:
#: 第#個字段
#,#[,#]:離散的多個字段,例如1,3,6
#-#:連續的多個字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
–output-delimiter=STRING指定輸出分隔符
顯示文件或STDIN數據的指定列
cut -d:-f1 /etc/passwd
cat /etc/passwd | cut-d:-f7
cut -c2-5 /usr/share/dict/words
paste 合并兩個文件同行號的列到一行
paste [OPTION]… [FILE]…
-d 分隔符:指定分隔符,默認用TAB
-s : 所有行合成一行顯示
paste f1 f2
paste -s f1 f2
有時候我們需要對文本進行分析
wc:收集文本統計數據
計數單詞總數、行總數、字節總數和字符總數
可以對文件或STDIN中的數據運行
例如:$wcstory.txt
39 237 1901 story.txt
行數 字數 字符數
使用 -l 來只計數行數
使用 -w 來只計數單詞總數
使用 -c 來只計數字節總數
使用 -m 來只計數字符總數
sort:文本排序
把整理過的文本顯示在STDOUT,不改變原始文件
$sort [options] file(s)
-r 執行反方向(由上至下)整理
-n 執行按數字大小整理
-f 選項忽略(fold)字符串中的字符大小寫
-u 選項(獨特,unique)刪除輸出中的重復行
-t c 選項使用c做為字段界定符
-k X 選項按照使用c字符分隔的X列來整理能夠使用多次
uniq:從輸入中刪除重復的前后相接的行
uniq[OPTION]… [FILE]…
-c: 顯示每行重復出現的次數;
-d: 僅顯示重復過的行;
-u: 僅顯示不曾重復的行;
連續且完全相同方為重復
常和sort 命令一起配合使用:
sort userlist.txt | uniq-c
linux上文本處理三劍客:
grep,egrep,fgrep:文本過濾工具(模式:pattern)工具;
grep:基本正則表達式,-E,-F
egrep:擴展正則表達式,-G,-F
fgrep:不支持正則表達式
sed:stream editor,流編輯器;文本編輯器工具;
awk:linux上的實現為gawk,文本報告生成器(格式化文本);
grep:Global search REgularexpression and Print out the line.
作用:文本搜索工具,根據用戶指定的“模式”對目標文件進行逐行匹配檢查;打印匹配到的行。
模式:由正則表達式字符及文本字符所編寫的過濾條件
正則表達式REFEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符不表示字符字面意義,而表示控制或通配的功能。
正則表達式分為兩類:
基本正則表達式:BRE
擴展正則表達式: ERE
grep:
grep [OPTIONS] PATTERN [FILE…]
OPTIONS:
–color=auto:對匹配到的文本著色后高亮顯示;
-i:ignorecase,忽略字符的大小寫;
-o:僅顯示匹配到的字符串本身;
-v, –invert-match:顯示不能被模式匹配到的行;
-E:支持使用擴展的正則表達式元字符;
-q, –quiet, –silent:靜默模式,既不輸出任何信息;
-A#:after,后#行
-B#:before,前#行
-C#:context,前后各#行
說到這里我們就非常有必要說一下正則表達式
正則表達式:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能。
基本正則表達式元字符:
字符匹配
.:匹配任意單個字符
[]:匹配指定范圍內的任意單個字符;
[^]:匹配指定范圍外的任意單個字符;
[:digit:] [:lower:] [:upper:] [:alpha:] [:alnum:] [:punct:] [:space:]
匹配次數:用在要指定其出現的次數的字符的后面,用于限制其前面字符出現的次數;默認工作于貪婪模式
*:匹配其前面的字符任意次:0.1.多次;
.*:匹配任意長度的任意字符
/?:匹配其前面的字符0次或1次;既其前面的字符是可有可無的;
\+:匹配其前面的字符1次或多次;既其前面的字符要出現至少1次;
\{m\}:匹配其前面的字符m次;
\{0,n}:至多n次
\{m,}:至少m次
位置錨定:
^:行首錨定;用于模式的最左側;
$:行尾錨定;用于模式的最右側;
^PATTERN$:用于PATTERN來匹配整行;
^$:空白行
^[[:space:]]*$:空行或包含空白字符的行;
單詞:非特殊字符組成的連續字符(字符串)都稱為單詞;
\<或\b:詞首錨定,用于單詞模式的左側;
\>或\b:詞尾錨定,用于單詞模式的右側;
\<PATTERN>:匹配完整單詞;
分組及引用
\(\):將一個或多個字符捆綁在一起,當做一個整體進行處理;
Note:分組括號中的模式匹配到的內容會被正則表達式引擎自動記錄于內部的變量中,這些變量為:
\1:模式從左側起,第一個左括號以及與之匹配的右括號之間的模式所匹配到的字符;
\2:模式從左側起,第二個左括號以及與之匹配的右括號之間的模式所匹配到的字符;
\3:
…
實例:\(string1\+\(string2\)*\)
\1: string1\+\(string2\)*
\2: string2
后向引用:引用前面的分組括號中的模式所匹配字符(而非模式本身)
擴展正則表達式:
egrep= grep -E
egrep [OPTIONS] PATTERN [FILE…]
擴展正則表達式的元字符:
字符匹配:
. 任意單個字符
[] 指定范圍的字符
[^] 不在指定范圍的字符
次數匹配:
*:匹配前面字符任意次
?: 0或1次
+:1次或多次
{m}:匹配m次
{m,n}:至少m,至多n次
位置錨定:
^ :行首
$ :行尾
\<, \b :語首
\>, \b :語尾
分組:
()
后向引用:\1, \2, …
例:
a|b
C|cat: C或cat
(C|c)at:Cat或cat
原創文章,作者:song_linux,如若轉載,請注明出處:http://www.www58058.com/29466