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

                          文本處理工具

抽取文本的工具

文件內容:less和cat

文件截取:head和tail

按列抽?。篶ut

按關鍵字抽取:grep

文件查看命令: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
下一篇 2016-08-08

相關推薦

  • 硬盤分區及掛載

    標簽:文件系統、分區、掛載 一、Linux的基本原則    1、一切皆文件(包括硬件);這個原則會會在很多方面得到體現; 磁盤在Linux中也表現為文件,即/dev目錄下:IDE,ATA:/dev/hd[a-z]    SATA,SCSI,USB,SAS:sd[a-z]。    &nbsp…

    Linux干貨 2015-05-18
  • 編程能力與編程年齡

    程序員這個職業究竟可以干多少年,在中國這片神奇的土地上,很多人都說只能干到30歲,然后就需要轉型,就像《程序員技術練級攻略》這篇文章很多人回復到這種玩法會玩死人的一樣。我在很多面試中,問到應聘者未來的規劃都能聽到好些應聘都說程序員是個青春飯。因為,大多數程序員都認為,編程這個事只能干到30歲,最多35歲吧。每每我聽到這樣的言論,都讓我感到相當的無語,大家都?!?/p>

    Linux干貨 2016-08-15
  • 系統管理中的三大利刃(htop glances dstat)

    工欲善事情,必先利其器,生產環境中的服務器在處理請求并生成回應數據的時間主要消耗在服務器端,包括了眾多的環節,如何全面了解我們linux服務器的CPU使用率、使用時間、內存占用比例、磁盤IO數據、網絡相關數據等等眾多指標,保證我們的linux服務器順利完成每一個請求,怎能沒有幾個趁手的利刃,而今天就讓我們見識一下系統管理中三大利刃。 相傳一把三尺長的軟劍,叫…

    Linux干貨 2015-11-18
  • Ansible_variable

    Ansible變量        系統自動化讓重復的工作變得更加容易,但是每個系統還是有一些細微的差別,變量就是如何處理系統之間的不同之處。這里將會列出變量的極大部分使用方法。   本文假設:你已經知道如何使用Ansible。知道inventory,facts等概念。   Ans…

    Linux干貨 2015-11-26
  • 推薦-使用Ansible部署LAMP環境

    使用Ansible部署LAMP環境 使用Ansible部署LAMP環境 前言 實驗環境 實驗步驟 配置ssh公鑰認證 安裝ansible 配置host iventory 創建YAML文件 運行Ansible-Playbook并測試 總結 前言 這兩天學習了Ansible, 在部署實驗環境真的很好用, 今天向大家分享如何使用Ansible部署LAMP環境, 本…

    Linux干貨 2016-04-10
  • hadoop安全模式

    hadoop安全模式在分布式文件系統啟動的時候,開始的時候會有安全模式,當分布式文件系統處于安全模式的情況下,文件系統中的內容不允許修改也不允許刪除,直到安全模式結束。安全模式主要是為了系統啟動的時候檢查各個DataNode上數據塊的有效性,同時根據策略必要的復制或者刪除部分數據塊。運行期通過命令也可以進入安全模式。在實踐過程中,系統啟動的時候去修改和刪除文…

    Linux干貨 2015-04-13
欧美性久久久久