文本處理工具
一、文本處理命令less,cat,more,sort
1.less
less :一頁一頁地查看文件或STDIN 輸出
查看時有用的命令包括:
/文本 搜索 文本
n/N 個 跳到下一個 or 上一個匹配
less 命令是man 命令使用的分頁器
2.cat
文件查看命令:cat, tac,
cat [OPTION]… [FILE]…
-E: 顯示行結束符$
-n: 對顯示出的每一行進行 編號
-A :顯示所有控制符
-b: 非空行編號
-s: 壓縮連續的空行成一行
cat f1 f2 同列合并 paste f1 f2 同行合并
paste -d 分隔符 -s 所有行合并成一行
3.more
more: 分頁查看文件
more [OPTIONS…] FILE…
-d: 顯示翻頁及退出提示
4.wc
wc 文件名 得到的是行數 單詞數 字符數
使用 -l 來只計數行數
使用 -w 來只計數單詞總數
使用 -c 來只計數字節總數
使用 -m 來只計數字符總數
字符與字節不相同
5.sort
文本排序sort
把整理過的文本顯示在STDOUT ,不改變原始文件
$ sort [options] file(s)
v 常用選項
ü -r 執行反方向(由上至下)整理
ü -n 執行按數字大小整理
ü -f 選項忽略(fold )字符串中的字符大小寫
ü -u 選項(獨特,unique )刪除輸出中的重復行
ü -t c 選項使用c 做為字段界定符
ü -k X 選項按照使用c 字符分隔的X 列來整理能夠使用多次
例證:sort -t: -k 3 -n /etc/getent 對/etc/getent中以:為分隔符的第三列的內容,按照內容數字大小進行排列,若要倒序排列則+r
二、文件截取:head和tail
1.head
head [OPTION]… [FILE]…
-c #: 指定獲取前# 字節
-n #: 指定獲取前#行 行
-#: 指定行數
2.tail
tail [OPTION]… [FILE]…
-c #: 指定獲取后# 字節
-n #: 指定獲取后#行
-f: 跟蹤顯示文件新追加的內容, 常用日志監控
三、按列抽?。?span style="font-family:Calibri">cut
cut [OPTION]… [FILE]…
-d DELIMITER: 指明分隔符,默認tab
-f FILEDS:
#: 第# 個字段
#,#[,#] :離散的多個字段,例如1,3,6
#-# :連續的多個字段, 例如1-6
混合使用:1-3,7
-c 按字符切割
–output-delimiter=STRING
舉例1:cut -d: -f1,3,5-7 /etc/passwd
以:作為分隔符,查看/etc/passwd中的第1,3,5-7列的內容
舉例2:使用cut將電腦的IP地址提取出來。
經過觀察,這些信息極為不規則,沒有明顯的分隔符。這時們需要首先提取出IP地址所在的行,然后去定義一個合適的分隔符,再利用cut進行提取即可。(思路:化繁為簡,化不規則為規則,這樣才能更好的套用我們的命令模型)
四、按關鍵字抽?。?span style="font-family:Calibri">grep
作用:文本搜索工具,根據用戶指定的“模式”對目標文
本逐行進行匹配檢查;打印匹配到的行;
–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
REGEXP :由一類特殊字符及文本字符所編寫的模式,其中有
些字符(元字符)不表示字符字面意義,而表示控制或通配
的功能
v 程序支持:grep, vim, less,nginx等 等
v 分兩類:
基本正則表達式:BRE
擴展正則表達式:ERE
grep -E, egrep
v 正則表達式引擎:
采用 不同 算法,檢查處理正則表達式的軟件模塊
PCRE(Perl Compatible Regular Expressions)
字符匹配:
. : 匹配任意單個字符;
[] : 匹配指定范圍內的任意單個字符
[^] :匹配指定范圍外的任意單個字符
[:digit:] 、[:lower:] 、[:upper:] 、[:alpha:] 、[:alnum:]
[:punct:] 、[:space:]
匹配次數:用在要指定次數的字符后面,用于指定前面的字符要出現的次數
* :匹配前面的字符任意次,包括0次 次
貪婪模式:盡可能長的匹配
.* :任意長度的任意字符
\? :匹配其前面的字符0 或1次
\+ :匹配其前面的字符至少1次
\{m\} :匹配前面的字符m次
\{m,n\} :匹配前面的字符至少m 次,至多n次
\{,n\} :匹配前面的字符至多n次
\{m,\} :匹配前面的字符至少m次
位置錨定:定位出現的位置
^ :行首錨定,用于模式的最左側
$ :行尾錨定,用于模式的最右側
^PATTERN$: 用于模式匹配整行
^$: 空行
^[[:space:]]*$ :空白行
\< 或 或 \b :詞首錨定,用于單詞模式的左側
\> 或 或 \b :詞尾錨定;用于單詞模式的右側
\<PATTERN\>
分組:\(\) :將一個或多個字符捆綁在一起,當作一個整體進
行處理,如:\(root\)\+
分組括號中的模式匹配到的內容會被正則表達式引擎記錄
于內部的變量中,這些變量的命名方式為: \1, \2, \3, …
\1: 從左側起,第一個左括號以及與之匹配右括號之間
的模式所匹配到的字符;
實例: \(string1\+\(string2\)*\)
\1: string1\+\(string2\)*
\2: string2
后向引用:引用前面的分組括號中的模式所匹配字符(而 而
非模式本身)
實例應用
一、 tail可用于日志的監視
在命令行輸入:tail -n 20 -f /var/log/messsages 這樣可以實時監測日志的變化。
通過logger “this is a test log”來觸發新日志的產生
tail -n 0 -f filename &
二、比較兩個文件之間的不同或者回復文件
diff -u a.txt b.txt > diff.log
[root@centos6testdir]#diff -u a.txt b.txt >diff.log
上述操作后,a.txt和b.txt的差異記錄在了diff.log中
若之后,b.txt不小心刪除掉了,則可以利用a.txt和diff.log來恢復b.txt文件。
此時用到patch命令,此時得到的a.txt文件,其內容實際就是誤刪除掉的b.txt文件的內容,而真正的a.txt文件的內容則保留在了a.txt.orig的文件中。
原創文章,作者:178babyhanggege,如若轉載,請注明出處:http://www.www58058.com/30839