一、*各種文本處理工具
1.1抽取文本的工具
1.1.1 cat、less查看文本內容
more、less和cat 【選項】 【文件】
cat –n ,-d列行 ,-A:顯示所有看不見的符號(控制符),
-E:顯示結尾$ ;-s:壓縮連續空行為一行
more –d:顯示翻頁及退出提示
less:一頁一頁查看文件或標準輸出
/文本:搜索文本 n/N:跳到下一個 或上一個匹配
1.1.2 head、tail文件截取
head和tail 【選項】 【文件】
head –c #:指定獲取前#個字節 ; -n #;-#:指定獲取前#行
tail –c #:指定獲取后#字節 ; -n #;-#:指定獲取后#行
-f:跟蹤顯示文件新追加的內容。常用于日志監控
例如:tail –n0 –f f2 & 后臺顯示跟蹤日志 fg 1打斷
1.1.3 cut、paste按列抽取
cut 和 paste 合并文件:【選項】 【文件】
cut -d:指明分隔符,默認為tab;常與-f一起使用;-c:按字符切割
-f #:第#個字段; –f #,#:離散的多個字段,例如1,3,6
-f #-#:連續的多個字段,例如1-5 ;混合使用:1-3,7
paste:合并兩個文件同行號的列到一行
-d:指明分隔符,默認為tab ;-s:所有行合成為一行顯示
paste f1 f2 ;paste –s f1 f2
1.1.4 wc、sort分析文本的工具
wc、sort 、diff和patch
文本數據統計:
wc -l:統計行數 ; -w:統計單詞總數 ;-c:統計字節數
文本排序:sort 【選項】 files
sort -r:執行反方向(由上至下)整理 -n:執行按數字大小整理
-f:忽略字符串中的字符大小寫 -u:刪除輸出中的重復行
-t c:選項用c作為字符界定符 -k X:c字符分隔的X列整理 常用-t -k 一起使用排序
1.1.5 uniq文本壓縮工具
uniq 【選項】 【file】
uniq –c:顯示每行重復出現的次數 ; -d:僅顯示重復過的行
-u:僅顯示不重復的行 注:連續且完全相同的方為重復。
常與sort命令一起使用 :sort userlist.txt | uniq -c
1.1.6 diff、patch比較文件間的區別
例如: $ diff foo.conf-broken foo.conf-works
輸出結果為:5c5 注:第5行有改變
< use_widgets =no ; > use_widgets =yes
diff命令的輸出被保存在一種叫做“補丁”的文件中;使用
diff -u:輸出“統一的(unified)”diff格式文件,最適用于補丁文件。
patch :命令復制在其他文件中進行的改變(要謹慎使用!)
patch -d:自動備份改變了的文件
例如: $ diff –u foo.conf-broken foo.conf-works > foo.patch
$ patch -b foo.conf-broken foo.patch
reset:重置,重生成
二、Linux文本處理三劍客
grep、sed、awk
sed:stream editor,文本編輯工具
awk:Linux上的實現gawk,文本報告生成器
grep:文本過濾(模式:pattern)工具
2.1 grep文本過濾工具
grep:Grobal search Regular expression and Print out the line
作用:文本搜索工具,根據用戶指定的“模式”對目標文件逐行進行匹配檢查;打印匹配到行:
grep 【選項】pattern 【file】
-n:搜索并顯示所在文本內容的行號; -o:只顯示匹配到的字符; –i:忽略字符的大小寫
-v:只顯示不能被pattern匹配到的行; –e:表示或者,實現多個邏輯關系如grep –e “cat” –e “ls” file
-c:計算查找“字符串”的次數; –A #:after,后#行 ;-B #:before,前#行 ;-C:context,前后各#行
REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不代表字符表面的意義,而表示控制
或通配的功能;程序支持:grep、vim、less、nginx
正則表達式引擎(man 7 regex)
采用不同的算法,檢查出路正則表達式的軟件模塊PCRE(Perl Compatible Regular Expressions)
元字符分類:字符匹配、匹配次數、位置錨定、分組
2.1.1字符匹配(文本內容)
.:匹配任意單個字符 []:匹配指定范圍內的任意單個字符
[^]:匹配指定范圍外的任意單個字符 [^/]+/?$:取基名
2.1.2匹配多次
*:匹配符號*前面字符任意次,包括0次 .*:匹配任意長度的任意字符,不包括:等特殊符號
\?:匹配前面的字符0次或者1次 \+:匹配前面的字符至少1次
gooo*gle 相當于 goo\+gle
\{n\}:匹配前面的字符n次 \{m,n\}:匹配前面的字符【m,n】次
\{1,\}相當于\+
2.1.3位置錨定
^:行首錨定(開頭的行) $:行尾錨定(結尾的行) ^$:空行 ^[[:space:]]*$:空白行
\<:單詞限定詞首; \>:單詞限定詞尾 \<pattern\>:匹配整個單詞
分組:\(\)將一個或多個字符捆綁在一起
分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為: \1, \2, \3, …
\1: 從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符
實例: \(string1\+\(string2\)*\) (\1|\2 ) \1: string1\+\(string2\)* \2: string2
后向引用:引用前面的分組括號中的模式所匹配字符 : \(r..t).*\(r..t\) 與\(r..t).*\1 是不同的
字母字符串后面如果有數字和下劃線那就錨定不了
轉義:\. 就表示.字符,而不是代表任意字符
三、*正則表達式
egrep及擴展的正則表達式 ;與grep功能差不多,就是正則表達式少了\。
或者: a|b:a或者b ; C|cat: C或者cat ;(C|c)at:Cat或者cat
3.1 文件名通配符
*:匹配零個或多個字符 ; ?:匹配任何單個字符; ~:當前用戶家目錄; ~mage:用戶mage 家目錄
~+ :當前工作目錄 ~—: 前一個工作目錄
[0-9] 匹配數字范圍; [a-z] :字母; [A-Z] :字母 ; [wang] 匹配列表中的任何的一個字符
v [^wang] 匹配列表中的所有字符以外的字符
預定義的字符類:(#man 7 glob)幫助文件
[:digit:] :任意數字,相當于0-9 ; [:lower:] :任意小寫字母
[:upper:]: 任意大寫字母 ; [:alpha:]: 任意大小寫字母
[:alnum:] :任意數字 或字 ; [:blank:] :水平空白字符 ; [:space:]:水平或垂直的空白字符
四、*sed 行編輯器
sed介紹、sed用法、sed高級用法
stream EDitor, 行編輯器 ,自帶一些編程語言 ,可以直接對文件修改,故一般用管道傳遞給sed
v sed 是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space ),接著用sed 命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。Sed 主要用來自動編輯一個或多個文件, 簡化對文件的反復操作, 編寫轉換程序等。
用法:sed [option] … 'script' inputfile… 支持正則表達式
4.1常用選項
-n :不輸出模式空間內容到屏幕,即不自動打印 ; -e: 多點編輯;多次編輯
-f :/ PATH/SCRIPT_FILE : 從指定文件中讀取編輯腳本
-r: 支持使用擴展正則表達式 ; -i: 原處編輯,直接修改建議-i.bak,先備份.bak后 (顯示修改的內容,修改 前的內容在file.bak中)
4.2 script ' 地址命令'
地址定界: (一般加上-n,要不然顯示2遍)
(1) 不給地址:對全文進行處理
(2) 單地址: #: 指定的行 ; /pattern/ :被此處模式所能夠匹配到的每一行
(3) 地址范圍:
#1,#2:從第#1行到#2行 ; #,+# ; /pat1/,/pat2/:匹配到part1到part2之間的行顯示
#,/pat1/ :匹配第#行到匹配part之間行的顯示
~ :步進 1~2 顯示奇數行 2~2 顯示偶數行
4.3 編輯命令
’script’ 地址定界用在’script前’
d: 刪除模式空間匹配的行; 例如:‘ d‘刪除有空格的行 ,也可以用全局替換
p: 顯示模式空間中的內容 , -n ‘10P’:僅顯示第10行,相當于head -10|tail -1;
(沒有-n的話,模式空間所有的文本都顯示,10行出現2次);
a [\]text :在指定行 后面追加文本 \n,可以追加兩行至幾行 ;支持 使用\n 實現多行追加
cat -n /etc/passwd | sed ‘10a\wwwww\nrrrrrr’ 顯示/ect/passwd文本,并在第10行后面插入wwwww 兩行
i [\]text :在行前面 插入文本 ;與上述差不多不過是第10行行前插入。 rrrrr
c [\]text :替換行為單行或多行文本 ;與上述差不多不過是替換第10行插入。
w /path/somefile: 保存模式匹配的行至指定文件
cat -n /etc/passwd | sed ‘10,15w f2’顯示/etc/passwd內容,但是把10-15行的內容寫到f2中去。
r /path/somefile :讀取指定文件的文本至模式空間中匹配到的行后面
cat -n /etc/passwd | sed ‘10,15r f2’顯示/etc/passwd內容,并在10-15行每一行后面插入顯示f2的內容。
cat -n /etc/passwd | sed -n ‘10,15r f2’,僅顯示/etc/passwd文本10-15行每行后面插入顯示f2的文本內容。
=: 為模式空間中的行打印行號 ; cat f1 |sed -n '/root/=' 僅顯示f1文本中含有root的行號
cat f1 |sed '/root/=' 顯示f1文本內容 ,并在root所在行上面顯示行號
!: 模式空間中匹配行取反處理 ;cat f1 |sed -n '/root/!=' 僅顯示f1文本中不含有root的行號
cat f1 |sed '/root/!=' 顯示f1不含有root行的文本內容 ,并在顯示的所在行上面顯示行號
4.4 查找替換
s/// :查找替換, 支持使用其它分隔符,s@@@ ,s### (不支持編輯命令)
cat /etc/passwd | sed ‘s/root/ROOT/’:把/etc/passwd文本中每一行第一個匹配到的root 替換為ROOT
v 替換標記: g: 行內全局替換 ;p: 顯示替換成功的行
w /PATH/TO/SOMEFILE :將替換成功的行保存至文件中
4.5 sed普通命令示例
sed ‘2p’ /etc/passwd 顯示/etc/passwd 所有內容,并再打印第二行顯示
vsed –n ‘2p’ /etc/passwd 僅顯示/etc/passwd 文本第2行的內容
vsed –n ‘1,4p’ /etc/passwd 僅顯示/etc/passwd 文本第1-4行的內容
vsed –n ‘/root/p’ /etc/passwd 僅顯示/etc/passwd 文本含有root行的內容
vsed –n ‘2,/root/p’ /etc/passwd 僅顯示/etc/passwd 文本從第2 行隨后第一個匹配到root的行
vsed -n ‘/^$/=’ file 僅顯示file文本空行行號
vsed –n –e ‘/^$/p’ –e ‘/^$/=’ file 僅顯示空白行和空白行號
vsed ‘/root/a\superman’ /etc/passwd 行后 在/etc/passwd文本含有root的行行后顯示superman
vsed ‘/root/i\superman’ /etc/passwd 行前 在/etc/passwd文本含有root的行行后顯示superman
vsed ‘/root/c\superman’ /etc/passwd 代替行 在/etc/passwd文本含有root的行替換為superman
vsed ‘/^$/d’ file 顯示file中的非空白行
vsed ‘1,10d’ file 顯示file文本中除1-10行的所有的行
vnl /etc/passwd | sed ‘2,5d’ 顯示/etc/passwd文本中除2-5行外所有的行和行號
vnl /etc/passwd | sed ‘2a tea’ 顯示/etc/passwd文本中所有行號及文本,并在第2行后插入tea
vsed 's/test/mytest/g' file 替換file文本中test為mytest
sed -n‘s/root/&superman/p’ /etc/passwd 單詞后:僅顯示/etc/passwd文本中root的行并把root替換為rootsuperman
sed -n ’s/root/superman&/p’/etc/passwd 單詞前:僅顯示/etc/passwd文本中root的行并把root替換為supermanroot
vsed -e‘s/dog/cat/’-e ‘s/hi/lo/’pets 把pets文本每一行第一個匹配的dog換成cat ;hi換成lo
vsed -i.bak‘s/dog/cat/g’pets 備份pets文本為pets.bak,并把pets文本中dog全部替換成cat顯示出來
4.6 sed 工具
v 高級編輯命令:(模式空間,保持空間)
h: 把模式空間中的內容覆蓋至保持空間中
H :把模式空間中的內容追加至保持空間中
g: 從保持空間取出數據覆蓋至模式空間
G :從保持空間取出內容追加至模式空間
x: 把模式空間中的內容與保持空間中的內容進行互換
n: 讀取匹配到的行的下一行 覆蓋 至模式空間
N :讀取匹配 到的行的 下一行 追加 至 模式空間
d: 刪除模式空間中的行
D :刪除 當前模式空間開端至\n 的內容 ( 不再傳 至標準輸出),放棄之后的命令,但是對剩余模式空間重新執行sed
4.7 sed高級編輯命令示例
v sed -n 'n;p' FILE 僅顯示file的偶數行
v sed '1!G;h;$!d' FILE 把file文本倒敘顯示 相當于tac file
v sed '$!N;$!D' FILE 顯示file文本最后2行 相當于tail -2
v sed '$!d' FILE 僅顯示file文本最后1行 相當于tail -1
v sed ‘G’ FILE 保持模式先為空的 ;追加到模式空間 ;就會形成模式空間每行之間有空格,再顯示出來
v sed ‘g’ FILE 保持模式先為空的 ;覆蓋模式空間 ;就會形成模式空間都為空格,再顯示出來一片空白
v sed ‘/^$/d;G’ FILE 顯示除空格之外的偶數行
v sed 'n;d' FILE 僅顯示奇數行
原創文章,作者:lyx,如若轉載,請注明出處:http://www.www58058.com/60550