文本處理、正則表達式、cut、grep、egrep、fgrep
Linux中文本處理工具最常用的就是文本處理三劍客grep、sed、awk再配合正則表達式,可以實現足夠多的文本處理功能。工具的強大之處是因為使用它的人,如何才能發揮文本處理工具的作用呢?答案就是正則表達式,其實正則表達式,只是一種思想,一種表示方法,只要我們使用的工具支持表示這種思想那么這個工具就可以處理正則表達式的字符串。這部分內容可以說是學習shell腳本之前必學的內容,理解越深刻那么shell腳本編寫能力就會越強。
文本處理
文本查看工具
cat -n
(包含了$回車符),-b
,-A
(-vTE),-e
(-vE),-v
(有^M無^T),-s
,-E
(回車)
tac -n
,-b
,-A
(-vTE),-e
(-vE),-v
(有^M無^T),-s
,-E
(回車)
rev
more -d
(加提示),只能下翻,能命令
less
PgUP翻頁,能搜,能命令
head
-n 前幾行,默認10行
tail
-n 后幾行,默認10行,-f /var/log/messages前端監控日志,tail -n 0 -f/var/log/message &后端顯示新日志,不影響使用,fg 1切換前臺,ctrl c終止
cut
cut -d
:-f1
-5,6,7 /etc/passwd # : 號截取,第幾段 –output-delimiter=+ # 替換分隔符
cut -c
44-46 file #字符截取,監控磁盤paste 橫向合并兩個文件
paste -d
: #指定橫向分隔的符號,默認Tab
paste -s
#一個文件的內容合并成一行顯示wc (word count) #字符收集統計數據
wc
file #行、單詞、字節
wc -m
#統計字符數
wc -l
#統計行數
wc -w
#統計以標點或space隔開的單詞數
wc -c
#統計字節數wc 輸入字符,最后輸入空格開的被統計字符,再ctrl d
sort #文本排序
sort -t
‘.’ #使用 . 做為字段界定符
sort -r
#反序
sort -f
#忽略字符串中的大小寫
sort -n
#按數字排序
sort -u
#去除重復行
sort -k3
#按 . 分隔符根據第3列來整理,可重復多次
sort -ut ‘.’ -k3
#按 . 分隔符根據第3列來整理并歸類,去除不屬于該類的行uniq #從輸入中山城重復的前后相接的行
uniq
file #合并相鄰的重復行
uniq -c
file #顯示合并的重復次數
uniq -d
file #只顯示重復的行
uniq -u
file #顯示不重復的行diff #比較兩個文件之間的區別
diff
xx yy
diff -c
xx yy
其中1-3表示行號c表示不同,常用的a表示多余的行,d表示刪除的行,即少的行,<表示第一個文件,>表示第二個文件。。diff -c 會以上下文的形式顯示兩個文件的不同之處,文件時間不同也會進行比較,行中不同的地方會在此行前加”!”:
diff -u
#選項來輸出“統一的(unified)”diff格式文件,最適用于補丁文件patch #復制對文件改變
patch -b
#自動備份改變了的文
diff -u
xx yy>zz.patch
patch -b
xx zz.patchgrep:global serarch REgular expressin and print out the line
grep -E
= egrep、grep -F fgrep(不支持正則表達式).bashrc加入alias grep=’grep –color=auto’
grep xxxx /etc/passwd /etc/group …. 在centos7上帶顏色
grep ‘$USER’ / “$USER” /
whoami
/etc/passwd
grep -v
string #顯示不包含string的行,排除
grep -i
String #忽略大小寫
grep -n
string #顯示包含string的行號
grep -c
string #統計string的行數
grep -o
strng #僅顯示string,配合正則表達式,精確匹配
grep -q
string #靜默模式,echo $?看看返回值
grep -A
3 string #顯示string與string后面(After)3行,可作為string輔助過濾,
grep -C
3 #string前后的3行
grep -e
‘root’ -e ‘sbin’ file #實現多個選項的邏輯或關系,類似正則中’root|sbin’
grep -w
string #完全匹配string,匹配單詞,以標點符號或者空格Tab分隔,類似正則中\bstring\b或\<string\>,具有同等效果,但這是不同的概念,必須加以區分
grep -E
= egrep #使用擴展的正則表達式標準的正則表達式
由一類特殊字符及文本字符編寫的模式,這些字符有控制或匹配的功能
man 7 regex #看正則表達式
程序支持
grep
、vim
、less
、nginx
匹配次數
grep
r.
t #匹配任意單個字符
grep
r[a-z]
t #匹配任一指定范圍內的任一個字符,如[aBc]表示匹配a或B或c
grep
r[^[1-7]]
t #不在指定范圍內的任一個字符
[:alpha:]、[:digital:]、[:alnum:]、[:punct:]、[:space:]、[:lower:]、[:upper:]
\*
# *號前的字符重復任意次數,盡可能長匹配
.*
# 任意長度的字符\? #前面的字符0次或1次,有和沒有都會匹配
\+
#前面的字符至少1次
\{n\}
#n次
\{m,n\}
#至少m次,至多n次
\{,n\}
#至多n次
\{m,\}
#至少m次
位置錨定
^
#句子的行首錨定
$
#句子的行尾錨定
^\$
空行錨定,用cat-A看到的號表示換行,^I表示Tab
grep -v
“^ *\$
” #不顯示以空格開頭的空行
grep -v
“^[[:space:]]*$
” #不顯示以空格和Tab開頭的空行
grep '\b
str’ 或 ‘\<
str’ #str開頭單詞的詞首錨定
grep
‘st\b
’ 或 ‘\>
str’ #str結尾單詞的詞尾錨定
\<string\>
#匹配整個單詞
分組
\(\)
:將一個或多個字符捆綁在一起,當作一個整體進行處理,如:(root)+分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為:\1, \2, \3
, …
\1
: 從左側起,第一個左括號以及與之匹配右括號之間的模式所匹配到的字符實例`:(string1+(string2)*)
\1
: string1+(string2)*
\2
: string2
后向引用
:引用前面的分組括號中的模式所匹配字符(而非模式本身)
邏輯或
‘
(
root|
bash)
’ #匹配root或bash‘
\(
ba|
c\)
sh’ #匹配bash或cshegrep及擴展的正則表達式,省略了轉義符
egrep
=grep -E
#可使用擴展的正則表達式字符匹配:
.
[]
[^]
次數匹配:
*
?
+
{
n}
{
m,n}
位置錨定:
^
$
\<
\>
\b
分組:
(``)
后向引用:\1,\2...
邏輯或:
(
a|
b)
(
a|
b)
c+ 與 * 的區別:* 匹配的是零次或者多次,被重復的內容可能并不會出現;+ 至少出現一次如ca+t會匹配cat和caaat,但不會匹配ct
注意:使用grep -E或者egrep時不要添加上述符號的轉義符
練習
原創文章,作者:helloc,如若轉載,請注明出處:http://www.www58058.com/30332