關于 文本處理工具、正則表達式、grep 的簡單舉例

                          文本處理工具

抽取文本的工具

文件內容:less和cat

文件截?。篽ead和tail

按列抽?。篶ut

按關鍵字抽?。篻rep

文件查看命令:cat,tac,rev

cat [選項] [file]

cat -n     對顯示出的每一行進行編號

cat -b     非空行編號

cat -ns    連續壓縮空行成一行

cat -v     顯示回車符

cat -E     顯示行結束符$

cat -A     顯示所有控制符

tac file   反向顯示內容

rev file   反向顯示每一行

hexdump -C file  二進制字符顯示內容

分頁查看文件內容

more [選項] [file]

more -d 顯示翻頁及退出提示

less 一頁一頁的查看文件

/字符   搜索關鍵字符

n/N     跳到下一個或者上一個

less 命令是man 命令使用的分頁器

顯示文本的前行或者后行內容

head [選項] [file]

head -c 數字  指定獲取文件前部分自定義數字的字節

head -n 數字  指定獲取文件前部分自定義數字的行

head -數字   指定獲取文件前部分自定義數字的行數

tail [選項] [file]

tail -c 數字  指定獲取文件后部分自定義數字的字節

tail -n 數字  指定獲取文件后部分自定義數字的行

tail -數字    指定獲取行數后部分自定義數字的行數

tail -f /dir/dir

查看日志的狀態

tail -n 0 -f /var/log/messages &

后臺運行,監測日志的最新內容,直接顯示終端上面,不影響正常工作

按列抽取文本cut和文件paste

cut [選項] [file]

cut -d: -f 1,2,3

-d指明分隔符比如以:為分隔符  默認tab

-f后面跟數字。顯示某個數字的字段

多個字段,例如#,#[,#] 例如1,3,6

連續的多個字段,例如#-# 例如1-6

也可以混合使用,例如1-5,7

cut -c數字范圍按字符切割;例如 cut -c55-56 file

–output-delimiter=指定輸出分隔符  顯示自定義分隔字符)

例如 cut -d: -f1-5 –output-delimiter=+ f1

練習

1找出ifconfig 命令結果中本機的ip地址

~]# ifconfig | head -2 | tail -1 | cut -d: -f2 |cut -d" " -f1

(命令)(管道接口|只顯示前2行的內容,管道接口|顯示后1行的內容,

管道接口|抽取以:為分隔符-f2字段的內容單獨顯示;

管道接口|抽取以“空格字符”為分隔符-f1字段的內容單獨顯示) 

2查出分區空間使用率的百分比值

~]# df |tail -5|tr ' ' ':'|tr -s ':'|cut -d: -f5

(命令)(管道接口|只顯示文件的后5行內容;管道接口|用tr命令將文件內容中的'空格'替換成':'

管道接口|用tr -s將連續重復的字符統一壓縮成一個字符;管道接口|抽取文件中以:為分隔符-f5第五個字段的內容顯示)

paste 合并兩個文件同行號的列到一行

paste [選項] [file]

paste -d  指定分隔符         例如 ~]# paste -d: f3 f4

paste -s  所有行合成一行顯示 例如 ~]# paste -s f3 f4

paste file file 格式         例如 ~]# paste f3 f4

分析文本的工具

文本數據統計:wc

整理文本:sort

比較文件: diff 和 patch

收集文本統計數據wc

計數單詞總數、總行數、字節的總數和字符的總數

      ]# wc f1

     18  79 883 f1

   行數;單詞數;字符數; 文件

wc -l   只計數行數

wc -w   計數單詞總數

wc -c   計數字節總數

wc -m   計數字符總數

文本排序sort

把整理過的文本顯示出來,不改變原始文件

sort [選項] file

常用選項

sort -r  執行反方向(由上至下)的整理顯示

sort -n  執行按數字大小整理顯示

sort -f  選項忽略(fold)字符串中的字符大小寫

sort -u  刪除多余重復的字符

sort -t  使用某個字符做為字段界定符;比如使用-t:以:作為字段界定符

sort -k  選項按照使用c字符分隔的X列來中立能夠使用多次

uniq 從輸入中刪除重復的前后相接的行

uniq [選項] [file]

uniq -c 顯示每行重復出現的次數

uniq -d 僅顯示重復過的行

uniq -u 僅顯示不曾重復的行

連續并且完全相同方位重復

通常和sort 命令一起配合使用

sort file | uniq -c

比較兩個文件之間的區別

diff [file] [file]

diff f1 f2  > bf.log 

比較兩個文件的區別并重定向到一個文件中

復制對文件改變patch

diff 命令的輸出被保存在一種叫做“補丁”的文件中

使用 -u 選項來顯示出來更詳細的變動內容

patch 命令復制在其他文件中進行的改變

使用 -b 選項來自動備份改變了的文件

diff f1 f2 -u > bf.log 

patch -b f1 bf.log 

先備份f1原有的文件內容,加-b選項后 會生成一個f1.orig的文件格式,這個是原先的f1

然后這個時候bf.log會變成f1文件,也就是恢復了原先的f2文件

練習

1查出用戶UID最大值的用戶名, UID級shell類型

~]# getent passwd |sort -t: -k3 -n |cut -d: -f1,3,7 |tail -1

(命令) (管道接口|-t選項以:為界定符的-k 第3列 -n按照數字大小整理排序)(抽出文本-d:為分隔符的-f 1,3,7字段的內容)(按照倒序1行顯示)

2查出/tmp的權限,以數字方式顯示

~]# stat /tmp | head -4 |tail -1 |tr " " "\n" |head -2 |tail -1 |tr -dc '[:digit:]'

~]# stat /tmp |head -4  |tail -1 |cut -d: -f2 |tr -dc '[:digit:]'

(命令) (正序顯示前4行然后倒序顯示后1行;抽取文本-d:為分隔符 -f 2字段的內容)(刪除在補集引用數字的字符)

文本處理三劍客

grep 文本過濾工具

grep,egrep,fgrep(不支持正則表達式搜索)

sed  文本編輯工具

awk  文本報告生成器

grep

作用:文本搜索功能根據,更具用那個戶指定的“模式”對目標文本逐行進行匹配檢查;打印匹配到的行

模式:由正則表達式字符及文本字符所編寫的過濾條件

grep 自定義字符 路徑 路徑

可以搜索指定的字符,可以加上兩個不同的路徑來顯示出來搜索結果

grep [選項] [自定義字符] [file]

grep root /etc/passwd

grep "$USER" /etc/passwd

grep '$USER' /etc/passwd

grep `whoami`/etc/passwd

alias grep='grep –color=auto' 對匹配到的文本著色顯示。6版本需要設置,7版本默認

grep -v 顯示不能被自定義字符匹配到的字符串

grep -i 忽略字符大小寫

grep -n 統計匹配的行數

grep -c 統計匹配的行數

grep -o 僅顯示匹配到的字符串

grep -q 靜默模式,不輸出任何信息

grep -A ##自定義數字。后幾行

grep -B ##自定義數字,前幾行

grep -C ##自定義數字,前后各幾行

grep -e 實現邏輯或和與,比如取root或者bash的行 grep -e root -e bash /etc/passwd;   

          例如,包括root并且bash, grep root /etc/passwd | grep bash

grep -w 整行匹配整個單詞

grep ‘自定義字符’ 默認搜索關鍵字

正則表達式

由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能

程序支持:grep,vim,less,nginx等

正則表達式分為兩類

基本正則表達式:BRE

擴展正則表達式: ERE   grep -E = egrep

正則表達式引擎:采用不同的算法,檢查處理正則表達式的軟件模塊

元字符分類:字符匹配、匹配次數、位置錨定、分組

基本正則表達式元字符

字符匹配:

.      匹配任意單個字符

[]     匹配指定范圍內的任意單個字符

[^]    匹配指定范圍外的任意單個字符

[:alnum:] 表示所有的字母和數字

[:alpha:] 表示左右的字母不區分大小寫

[:digit:] 表示所有的數字

[:lower:] 表示所有的小寫字母

[:punct:] 表示所有的標點符號

[:space:] 表示所有的空白字符

[:upper:] 表示所有的大寫字母

次數匹配:用于要指定次數的字符后面,用于指定前面的字符要出現的次數

*:匹配前面的字符任意次,包括0次;貪婪模式:盡可能的匹配能匹配多少。

.*:任意長度的任意字符

\?: 匹配其前面的字符0或1次

\+: 匹配其前面的字符至少1次

\{n\} 匹配前面的字符n次

\{m,n\} 匹配前面的字符至少m次,至多n次

\{,n\}  匹配前面的字符至多n次

\{n,\}  匹配前面的字符至少n次

位置錨定:對特定位置進行定位顯示

^ :行首錨定,用于模式的最左側

$ :行尾錨定,用于模式的最右側

^自定義字符$ :用于匹配到整行

^$ :空行

^[[:space:]]*$ :空白行

\<或\b :詞首錨定,用于單詞模式的左側

\>或\b :詞尾錨定,用于單詞模式的右側

\<自定義字符\>  :匹配整個單詞

分組:分組是至將一個或多個字符捆綁在一起,當作一個整體進行處理,其符號為\(\):

如:\(root\)\+

rootrootroot

將三個root分組\(root\) \+表示重復一次以上

分組括號中的模式匹配到的內容會被正則表達式引擎記錄于內部的變量中,這些變量的命名方式為:\1,\2,\3,…

\1: 從左側起,第一個左括號以及與之匹配的右括號之間的模式所匹配到的字符

\2: 從左側起,第二個左括號以及與之匹配的右括號之間的模式所匹配到的字符

例如 \(ab\+\(xy\)*\)中\1表示 ab\+\(xy\)* \2表示 xy

后向引用:引用錢面的分組括號中的模式所匹配的字符,而非模式本身

egrep及擴展的

正則表達式

egrep = grep -E

egrep [選項] [自定義字符] [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

擴展正則表達式的使用語法

grep -E '自定義字符' file

egrep '自定義字符' file 

練習

1顯示三個用戶root,xiaomage,makangbo的UID和默認shell類型

egrep "^(root|xiaomage|makangbo):" /etc/passwd | cut -d: -f3,7

(擴展正則表達式用“”引用表達式元字符^取開頭為某字符的字段;后面跟文件路徑)

(管道接口|-d抽取分隔符為:的字段 -f 定義第3,7個字段為結果)

 

2 找出/etc/rc.d/init.d/functions 文件中行首為某單詞(包括下劃線)后面跟一個小括號的行 

~]# cat /etc/rc.d/init.d/functions | egrep -o "^[[:alnum:]_]+\(\)"

(查看文件路徑內容;管道接口|擴展正則表達式加-o選項僅顯示匹配到的字符 

“”引用^開頭為所有字母和數字,并且帶有下劃線和分組為括號的字段顯為顯示結果)

3使用egrep取出/etc/rc.d/init.d/functions中基名

 ~]# echo "/etc/rc.d/init.d/functions" | egrep -o "[^/]+?$"

(回顯命令 文件路徑內容 ;管道接口|擴展正則表達式 -o選項僅顯示匹配到的字符 

“”引用[^/]匹配知指定范圍外的任意單個字符,+匹配前面的字符至少一次?任意字符$匹配字符結尾)

4 顯示/etc/passwd 文件中不以/bin/bash結尾的行

~]# grep -v /bin/bash$ /etc/passwd

 (正則表達式-v選項顯示不能被匹配到的行,不匹配以/bin/bash$為結尾的字符,,后面跟文件路徑)

5 顯示rpc默認的shell程序

 ~]# grep -w "\<rpc" /etc/passwd |cut -d: -f7

 (命令加-w選項,整行匹配整個單詞。引用詞首錨定\<為rpc 后面跟上文件路徑)

 (抽取文本-d:為分隔符的 定義-f7的字段內容為顯示結果)

6 找出/etc/passwd 中的兩位或三位數

~]# grep "[0-9][0-9][0-9]\?" /etc/passwd

(命令 引用[數字范圍]\? 匹配前面的字符0次或1次,就是前面的可有可無 后面跟文件路徑)

7顯示 /etc/grub2.cfg 文件中,至少以一個空白字符開頭的,并且后面存在費空白字符的行

~]# grep "^[[:space:]\+[^[:space:]]" /etc/grub2.cfg

(命令引用^開頭為空白字符的\+匹配最少一次[^[非空白結尾的字符行 后面跟文件路徑)

8找出‘netstat -tan’命令結果中以'LISTEN'后跟任意多個空白字符結尾的行

~]# netstat -tan  | grep "LISTEN[[:space:]]*$"

(命令  管道接口|正則表達式引用LISTEN之后跟空白字符*匹配任意次$行尾錨定)

 

9 添加用戶bash,testbash,basher,nologin (shell為/sbin/nologin)而后找出/etc/passwd文件中用戶名同shell的行

~]# grep "^\([[:alnum:]]\{1,\}\):.*\1$" /etc/passwd

(命令引用^行首錨定,分組所有字母數字\{1,\}匹配前面的字符至少一次 .*匹配任意長度的任意字符 \1后向引用 $行尾錨定  后面跟文件路徑)

  

不管什么命令,要學會靈活使用,有的時候搭配在一起會讓人有意想不到的結果,比如 rm -rf /   關于 文本處理工具、正則表達式、grep 的簡單舉例

原創文章,作者:小馬哥,如若轉載,請注明出處:http://www.www58058.com/31336

(0)
小馬哥小馬哥
上一篇 2016-08-08 16:04
下一篇 2016-08-08 16:05

相關推薦

  • SQL優化大全

    1. 優化SQL步驟 1. 通過 show status和應用特點了解各種 SQL的執行頻率        通過 SHOW STATUS 可以提供服務器狀態信息,也可以使用 mysqladmin extende d-status 命令獲得。 SHOW STATUS 可以根據需要顯示 session 級別的統計結果和 g…

    Linux干貨 2015-04-13
  • GOPS 2016全球運維大會 上海站

    GOPS 2016全球運維大會 ? 上海站已經圓滿落幕,最新GOPS大會推薦:GOPS2017全球運維大會 ? 深圳站 基本信息: GOPS2017全球運維大會 ? 深圳站 時間:2017-04-21 08:00:00 至 2017-04-22 18:00:00結束 地點:深圳    會議規模:5000人 會議詳情:http://www.…

    系統運維 2016-09-07
  • 基于Cobbler實現多版本操作系統自動部署

    前言     在生產環境中,當需要批量部署幾十甚至上百臺服務器時,實現自動化安裝操作系統尤為重要,按照傳統的光盤引導安裝是不可想象的;此前我們通過pxe+kickstart簡單實現了自動化安裝,但只能實現單一版本安裝,當需要部署不同版本或不同引導模式(BIOS、EFI)時,此種方式就不夠靈活。而Cobbler正是為了解…

    Linux干貨 2015-08-11
  • zabbix報警信息提取

    zabbix報警信息提取     在日常的監控中,我們除了日常的zabbix操作外,我們有的時候還涉及到與其他公司進行數據對接。由于別的公司的數據對接很多時候并不是按照zabbix的數據結構(尤其是大型廠家,或是專業監控廠家,并不會直接使用zabbix,多數是自己開發或是對其他監控軟件進行二次開發之類),在這種需求基礎…

    Linux干貨 2015-12-19
  • DNS服務器之理論基礎

    一、什么是DNS     DNS全稱為Domain Name System,即域名系統,其作用就是將我們經常使用的“網址”解析為IP地址。     在互聯網上通信需要借助于IP地址,但人類對于數字的記憶能力遠不如文字,那么將IP地址轉換成容易記憶的文字是個好辦法,可是計算機只能識…

    Linux干貨 2015-04-29
  • 優云Automation:實現IT服務彈性伸縮的利器

    隨著互聯網業務快速持續增長,IT資源使用量按需變化成為常態,這就要求信息部門能快速響應資源使用的變化要求,對運維提出不小挑戰。比如電商、在線教育等企業經常推出一些秒殺、搶紅包活動,在特定時間段對資源的利用處于高峰期,之后基本處于空閑。 幾年前,我們從申請采購到應用部署上線都只能人工操作,需要提前幾個月開始規劃。如今通過云平臺能很好實現資源按需動態管理,運維人…

    系統運維 2017-03-15
欧美性久久久久