一、各種文本工具
文件查看
命令:cat,tac,rev
cat optiong file
-E:顯示行結束符$
-n:對顯示出的每一行進行編號
-A:顯示所有控制符
-b:非空行編號
-s:壓縮連續的空行成一行
-v:查看windows下的^M
[root@localhost wang]# cat -n file1 1 123456 2 3 abcdwf 4 5 6
tac:行倒過來顯示
[root@localhost wang]# tac file1 abcdwf 123456
rev:每一行的字符反著顯示
[root@localhost wang]# rev file1 654321 fwdcba
分頁查看文件內容
more:分頁查看文件
more option file
-d:顯示翻頁及退出提示
less:一頁一頁的查看文件或stdin輸出
查看是有用的命令包括:
n/N 跳到下一個或上一個匹配
less 命令是man命令使用的分頁器
顯示文本前或后行內容
head:顯示前面行
head option file
-c #:指定獲取前#字節
-n #:指定獲取前#行
– #:指定行數
tail:顯示后面行
tail option file
-c #:指定獲取后#字節
-n #:指定獲取后#行
– #:指定行數
-f:跟蹤顯示文件新追加的內容,常用日志監控
[root@localhost wang]# cat file1 123456 789987 abcdwf gebi laowang [root@localhost wang]# head -n1 file1 123456 [root@localhost wang]# tail -n1 file1 laowang
按列抽取文本cut和合并文件paste
cut option file
-d delimiter:指明分隔符,默認tab
-c:按字符切割
-f fileds:
#:第#個地段
#,#:離散的多個字段, 例如-f 1,3,4
#-#:連續多個字段,例如1-6
混合使用1-3,8
–output-delimiter+STRING指定輸出分隔符顯示文件或stdin數據的指定列
[root@localhost wang]# cut -d: -f1,3 --output-delimiter=+ /etc/passwd root+0 bin+1 daemon+2 adm+3 lp+4 sync+5 shutdown+6 halt+7 mail+8 operator+11 games+12 ftp+14 nobody+99 systemd-bus-proxy+999 .....
paste:合并兩個文件同行號的列到一行
paste option file
-d 分隔符:指定分隔符,默認用tab
-s:所有行合成一行顯示
[root@localhost wang]# paste -d / file1 file2 123456/12345 789987/qwdasd abcdwf/12314 gebi/qwrqr laowang/laowang
收集文本統計數據wc
計數單詞總數、行總數、字節總數和字符總數
可以對文件的stdin中的數據運行
-l:只計數行數
-w:只計數單詞總數
-c:只計數字節總數
-m:只計數字符總數
[root@localhost wang]# wc file1 5 5 34 file1 [root@localhost wang]# wc -l file1 5 file1 [root@localhost wang]# wc -w file1 5 file1 [root@localhost wang]# wc -c file1 34 file1 [root@localhost wang]# wc -m file1 34 file1
文本排序sort
把整理過的文本顯示在stdout,不改變原始文件
sort option file(s)
-r:執行反方向(由上至下)整理
-n:執行按數字大小整理
-f:選項忽略(fold)字符串中的字符大小寫
-u:選項(獨特,unique)刪除輸出總的重復行
-t c:選項使用c作為字段界定符
-k X:選項按照使用c字符分個的X列來整理能夠使用多次
uniq:從輸入中刪除重復的前后相接的行
uniq option file
-c:顯示每行重復出現的次數
-d:僅顯示重復過的行
-u:僅顯示不曾重復的行
連續且完全相同方為重復
常和sort 命令一起配合使用:
sort file | uniq -c
[root@localhost wang]# cat file2 2 2 33 33 12 12 23 23 [root@localhost wang]# sort -n file2 |uniq -c 2 2 2 12 2 23 2 33
比較文件
比較兩個文件之間的區別
diff file1 file2
[root@localhost wang]# diff file1 file2 2,4c2,4 < 789987 < abcdwf < gebi --- > qweq > adaf > afdqwr 注:2到4行不一樣
復制對文件改變patch
diff 命令的輸出被保存在一種叫做“補丁”的文件中
使用-u選項來輸出“統一的(unified)”diff格式文件,最適用于補丁文件
patch命令復制在其他文件中進行的改變(要謹慎使用)
使用-b選項來自動備份改變了的文件
[root@English6 wang]# diff -t file1 file2 > file3 [root@English6 wang]# rm -f file2 [root@English6 wang]# ll total 8 -rw-r--r--. 1 root root 29 Aug 8 15:44 file1 -rw-r--r--. 1 root root 60 Aug 8 15:48 file3 [root@English6 wang]# patch -b file1 file3 patching file file1 [root@English6 wang]# ll total 12 -rw-r--r--. 1 root root 31 Aug 8 15:48 file1 -rw-r--r--. 1 root root 29 Aug 8 15:44 file1.orig -rw-r--r--. 1 root root 60 Aug 8 15:48 file3 注:當恢復file2文件是自動命名file1,而原file1文件自動命名后面加.orig的文件
二、grep全面搜索正則表達式并把行打印出來
grep:文本過濾(模式:pattern)工具
grep,egrep,fgrep(不支持正則表達式搜索)
sed:stream editor,文本編輯工具
awk:linux上的實現gawk,文本報告生成器
grep::Global search REgular expression and Print out the line
作用:文本搜索工具,根據用戶指定的“模式”對目標文本逐行進行匹配檢查,打印匹配到的行
模式:有正則表達式字符及文本字符所編寫的過濾條件
grep option pattren file
[root@English6 wang]# grep --color=auto root /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@English6 wang]# grep "$USER" /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin [root@English6 wang]# grep '$USER' /etc/passwd [root@English6 wang]# grep `whoami` /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin
–color=auto:對匹配到的文本著色顯示
-v:顯示不能夠被pattern匹配到的行
-i:忽略字符大小寫
-n:顯示匹配的行號
-c:統計匹配的行數
-o:僅顯示匹配到的字符串
-q:靜默模式,不輸出任何信息
echo $?:查看找沒找到 0:表示匹配到了
-A #:顯示后#行
-B #:顯示前#行
-C #:顯示前后各#行
-e:實現多個選項間的邏輯or關系
例如:grep -e 111 -e 222 file 找到file中有111或者222的行
-w:正行匹配整個單詞
-E:使用ERE
[root@English6 wang]# cat file1 root wang laowang gebilaowang wang 23 4 56 7 gebidashu LAOWANG [root@English6 wang]# grep -v "wang" file1 root 23 4 56 7 gebidashu LAOWANG [root@English6 wang]# grep -i "laowang" file1 laowang gebilaowang LAOWANG [root@English6 wang]# grep -n "wang" file1 2:wang 3:laowang 4:gebilaowang 5:wang [root@English6 wang]# grep -c "wang" file1 4 [root@English6 wang]# grep -o "wang" file1 wang wang wang wang [root@English6 wang]# grep -q "wang" file1 [root@English6 wang]# echo $? 0 [root@English6 wang]# grep -A2 "4" file1 4 56 7 [root@English6 wang]# grep -B2 "4" file1 wang 23 4 [root@English6 wang]# grep -C2 "4" file1 wang 23 4 56 7 [root@English6 wang]# grep -e "gebi" -e "root" file1 root gebilaowang gebidashu [root@English6 wang]# grep -w "wang" file1 wang wang
三、正則表達式
regexp:有一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能
程序支持:grep,vim,less,nginx等。
分為兩類:
基本正則表達式:BRE
擴展正則表達式:ERE
正則表達式引擎:
采用不同算法,檢查處理正則表達式的軟件模塊
PCRE(Perl Compatible Regular Expressions)
元字符分類:字符匹配,匹配次數,位置錨定,分組
字符匹配:
.:匹配任意單個字符
[]:[]內的任意單個字符
[^]:除[]內的任意單個字符
[:digit:]:所有數字
[:lower:]:所有小寫字母
[:upper:]:所有大寫字母
[:alpha:]:所有字母,包括大小寫
[:alnum:]:所有字母和數字
[:punct:]:所有標點符號
[:space:]:空格和tab
匹配次數:
用在要指定次數的字符后面,用于指定前面的字符要出現的次數
*:匹配前面的字符任意次,包括0次
貪婪模式:盡可能長的匹配
.*:任意長度的任意字符
\?:匹配前面的字符0或1次
\+:匹配前面的字符至少1次
\{n\}:匹配前面的字符n次
\{m,n\}:匹配前面的字符至少m次,最多n次
\{,n\}:匹配前面的字符最多n次
\{m,\}:匹配前面的字符多少m次
位置錨定:
定位出現的位置
^:行首
$:行尾
^pattern$:用于模式匹配正行
^$:空行
^[[:space:]]*$:空白行
\<或\b:詞首錨定
\>或\b:詞尾錨定
\<pattern\>:匹配整個單詞
分組:
\(\):將一個或多個字符捆綁在一起,當作一個整體進行處理
例如:\(root\)\+ 匹配root在文件行中最少一次
分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為:\1,\2,\3……
\1:從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符
后向引用:引用前面的分組括號中的模式所匹配字符(而非模式本身)
[root@English6 wang]# cat file1 root1wangrootwang rootwang2rootwang rootwangroot3wang root1wangruutwaag rootwang2ruutwaag rootwangruut3waag [root@English6 wang]# grep "\(r..t\).*\(w..g\)\1\2" file1 root1wangrootwang [root@English6 wang]# grep "\(r..t\)\(w..g\).*\1\2" file1 rootwang2rootwang [root@English6 wang]# grep "\(r..t\)\(w..g\)\1.*\2" file1 rootwangroot3wang
擴展正則表達式
egrep option pattern file
字符匹配:
.:匹配任意單個字符
[]:[]內的任意單個字符
[^]:除[]內的任意單個字符
次數匹配:
*:匹配前面字符任意次
?:匹配前面字符0或1次
+:匹配前面的字符至少1次
{n}:匹配前面的字符n次
{m,n}:匹配前面的字符至少m次,最多n次
位置錨定:
^:行首
$:行尾
\<或\b:詞首錨定
\>或\b:詞尾錨定
分組:
()
后向引用:\1,\2….
或者:
a|b:a或者b
C|cat:C或cat
原創文章,作者:DYW,如若轉載,請注明出處:http://www.www58058.com/30040