常用文本處理工具及grep和正則表達式

一、文件查看命令

(1)普通查看工具:cat,tac,rev

 1、cat命令常用選項

   -n:顯示行號

   -E:顯示行結束符$

   -A:顯示所有控制符

 2、tac:從最后一行開始倒序顯示

 3、rev:將每一行的內容反轉顯示

 

(2)分頁查看內容:more,less

 less功能比more多

 less是man幫助使用的分頁器,用法與man相同

(3)顯示文本前或后行內容:head,tail

 1.head與tail通用選項

 -c#:獲取指定#字節內容

 -n #或-#:獲取指定行數

 2.tail-f:跟蹤顯示文件新追加內容

二、文本處理工具

(1)按列抽取文本工具:cut

 -c:按字符切割

 -d:按分隔符切割

 -f:指明顯示區域

 如,-f1、-f 1,3,5、-f 2-4、-f 1,5-9

 查看passwd文件,顯示UID及shell類型

[root@centos7 tmp]# head -5 /etc/passwd |cut -d: -f3,7
0:/bin/bash
1:/sbin/nologin
2:/sbin/nologin
3:/sbin/nologin
4:/sbin/nologin

(2)分析文本的工具:wc,sort,uniq

 1. wc:統計行數,單詞數,字符數,字節數

 -l:只統計行數

 -w:只統計單詞數

 -m:只統計字符數

 -c:只統計字節數

 如下,分別顯示行數,單詞數,字符數

[root@centos7 tmp]# wc /etc/passwd
  48   93   2513 /etc/passwd

(3)文本排序工具:sort

 把排序后的文本輸出到STDOUT,不改變原文件

 常用選項:

 -n:按數字大小排序

 -h:按人類易讀單位排序

 -f:忽略(fold)字符串中的大小寫

 -u:刪除選項中重復的行

 -t:按指定分隔符

 -k #:按分隔符隔開的第#列進行排序,可重復使用

(4)重復行處理工具:uniq

 常用選項:

 -c:顯示每行重復的次數

 -d:僅顯示重復的行

 -u:僅顯示不重復的行

 常和sort結合使用

 sort|uniq -c

 例子,統計所用用戶shell類型使用個數

[root@centos7 ~]# cut -d: -f7 /etc/passwd|uniq -c         #沒有sort排序得到錯誤結果  
      1 /bin/bash
      4 /sbin/nologin
      1 /bin/sync
      1 /sbin/shutdown
      1 /sbin/halt
     35 /sbin/nologin
      4 /bin/bash
      1 /sbin/nologin
[root@centos7 ~]# cut -d: -f7 /etc/passwd|sort|uniq -c   #sort結合uniq使用得到正確結果
      5 /bin/bash
      1 /bin/sync
      1 /sbin/halt
     40 /sbin/nologin
      1 /sbin/shutdown

(5)其他工具:paste,diff,patch

 1.paste:將連個文件同行合并

 2.diff:比較兩個文件的區別

 3.patch:復制在其他文件中的改變

diff -u file.old file.new >patch.dd       #將比較信息輸出到文件中
patch file.old patch.dd                   #通過補丁對文件更新

三、grep

 grep: Global search REgular expression and Print out the line.

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

 egrep等價于grep -E,支持擴展正則表達式

 fgrep等價于grep -F 不支持正則表達式,但速度快

 (1)grep [OPTIONS] PATTERN [FILE…]

 常用選項:

 -n:顯示匹配的行號

 -c: 統計匹配的行數

 -v: 顯示不能夠被pattern匹配到的行

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

 -i: 忽略字符大小寫

 -w:整行匹配整個單詞

 -e:實現多個選項間的邏輯or關系

 grep –e ‘cat ’  -e ‘dog’  file

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

 -A #:after, 后#行

 -B #: before, 前#行

 -C #:context, 前后各#行

 -E:使用ERE

四、正則表達式

 REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,

 而表示控制或通配的功能。

 正則表達式分為兩類:

 1.基本正則表達式:BRE

 2.擴展正則表達式:ERE

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

(1)字符匹配

 –構成模式的基本元素 

 . : 匹配任意單個字符

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

    [0-9],[a-zA-Z],[a-z0-9]…

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

    [^0-9]非數字

 [:digit:]、[:lower:]、[:upper:]、[:alpha:]、[:alnum:]、[:punct:]、[:space:]

(2)匹配次數

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

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

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

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

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

 \{m\}:匹配前面的字符m次      

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

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

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

(3)位置錨定

 位置錨定:定位出現的位置;更加精確描述字符的位置

 –這部分用法比較靈活,容易忘記錨定,造成錯誤匹配

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

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

   ^PATTERN$: 用于模式匹配整行

   ^$: 空行

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

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

 \> 或 \b:詞尾錨定;用于單詞模式

 \<PATTERN\>:匹配整個單詞

(4)分組

 分組:\(\):將一個或多個字符捆綁在一起,當作一個整體進行處理,如:\(root\)\+

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

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

 實例: \(string1\+\(string2\)*\)

 \1: string1\+\(string2\)*

 \2: string2

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

 例子:添加用戶bash、testbash、basher以及nologin(其shell為/sbin/nologin),而后找出/etc/passwd文件中用  戶名同shell名的行

[root@centos7 movie]# egrep "^(.*\>).*\1$" /etc/passwd  
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
nologin:x:1005:1005::/home/nologin:/sbin/nologin

 ^(.*\>)——某個開頭的單詞

 \1$———-以(.*\>)這個單詞結尾

 這樣就找到符合題意的行

 擴展正則表達式的元字符

(1)字符匹配

 保持不變

(2)匹配次數

 \+ –> +

 \? –> ?

 \{\} –> {}

(3) 位置錨定

 保持不變

(4) 分組

 \(\) –>()

 后向引用:\1,\2,\3…

(5) 或者表示 

 cat|dog :cat或dog

 (C|c)at:Cat或cat

 

 *****牛刀小試****** 

 

 1、顯示當前系統root、fly或halt用戶的UID和默認shell

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

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

 4、使用egrep取出上面路徑的目錄名

 答案:

 1.egrep "^(root|fly|halt)\>" /etc/passwd|cut -d: -f3,7

 2.egrep "^[a-zA-Z_]+\(\).*" /etc/rc.d/init.d/functions

 3.egrep -o "[^/]+/?$"

 4.egrep -o ".*\<"

原創文章,作者:cutemsyu,如若轉載,請注明出處:http://www.www58058.com/31757

(0)
cutemsyucutemsyu
上一篇 2016-08-11 09:37
下一篇 2016-08-11 09:37

相關推薦

  • 第十二周作業

    1、請描述一次完整的http請求處理過程;     1)建立或處理連接:接收請求或拒絕請求;     2)接收請求:接收來自于網絡的請求報文中對某資源的一次請求的過程;接收請求的方式通常是并發訪問響應模型;     3)處理請求:對請求報文進行解析,并獲取請求的資源及請求方法等相關信息,解析后的報文…

    2017-03-27
  • 計算機構成與Linux基礎知識之一

    簡述計算機構成,Linux如何誕生及主流發行版;簡單命令介紹;如何獲取幫助及Linux目錄命名及功用簡介紹。

    2018-02-26
  • LNMP的虛擬主機配置http和https

    項目實戰:    搭建LNMP環境:Linux+Nginx+Mysql(MariaDB)+php(php-fpm),創建多個虛擬主機:    主機1提供正常的http服務,用于安裝wordpress博客;    主機2提供正常的https服…

    Linux干貨 2016-10-30
  • shell腳本小練習..

    剛剛接觸vim和shell腳本,用幾個小腳本練練手。 1、編寫腳本/root/bin/systeminfo.sh,顯示當前主機系統信息,包括主機名,IPv4地址,操作系統版本,內核版本,CPU型號,內存大小,硬盤大小。 2、編寫腳本/root/bin/backup.sh,可實現每日將/etc/目錄備份到/root/etcYYYY-mm-dd中。 3、編寫腳本…

    2017-04-13
  • linux基礎入門之一

    一、計算機的組成與功能 計算機由硬件和軟件組成 硬件: 按馮·洛伊曼體系劃分 1、CPU:包括運算器、控制器、寄存器、緩存,對數據控制和計算 2、存儲器:內部存儲器、外部存儲器,對數據提供存儲功能 3、輸入設備:具有下指令,提供數據輸入 4、輸出設備:輸出數據加工的結果 軟件: 1、低級語言:匯編語…

    Linux干貨 2016-09-19
欧美性久久久久