常用文本處理工具及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
下一篇 2016-08-11

相關推薦

  • 文本處理工具應用練習

    練習:  1 、找出ifconfig 命令結果中本機的IPv4 地址 思路:我們使用ifconfig命令可知,ip地址是在第二行,所以我們先篩選出第二行,       第二行中的分隔符看起來很混亂,都是不規則的,有一個空格或多個空格的,沒有標準       所以我們最好是建立一個標準分隔,…

    Linux干貨 2016-08-08
  • 文件管理命令及變量基礎

    文件管理工具:cp,    mv,     rm       cp命令:copy 源文件;目標文件 單源復制: cp [OPTION]….[-T]  SOURCE  DEST 多源復制:cp [OPTION] ….SOURCE…DIR…

    Linux干貨 2016-12-21
  • 數據庫的備份和恢復

    數據庫的備份和恢復 一 (理論篇)、數據庫備份與恢復基礎 1、數據庫的備份與恢復 備份:存儲的數據副本; 原始數據:持續改變; 恢復:把副本應用到線上系統; 僅能恢復至備份操作時刻的數據狀態; 時間點恢復: binary logs; 2、為什么備份? 災難恢復: 硬件故障(冗余)、軟件故障(bug)、自然災害、黑客攻擊、誤操作、…&nb…

    2016-11-22
  • 第二周作業

    一、文件管理命令以及演示方法  1.1. mkdir命令     作用:創建文件夾     基本用法:mkdir [OPTION]… DIRECTORY…     參數:   &nbsp…

    Linux干貨 2016-08-22
  • Linux磁盤管理

    一、磁盤簡介 機械硬盤的組成部件主要有:盤片、機械手臂、磁頭與主軸馬達;盤片又可以細分為扇區(Sector)和磁道(Track),所有盤片的同一個磁道稱之為柱面(Cylinder) 目前主流的磁盤接口有SCSI、SATA、SAS、USB等 Linux一切皆文件,硬件設備也有對應的文件,linux訪問設備,其實就是訪問與其對應的文件系統接口 設備文件: &nb…

    Linux干貨 2016-06-01
  • 筆記一.如何使用VMWare Workstations 12 創建虛擬機

    筆記一.如何使用VMWare Workstations 12 創建虛擬機   一、準備工作 1.下載并安裝VMWare Workstations 12 http://www.epinv.com/post/6304.html 下載鏈接 二、創建虛擬機步驟 1.打開VMWare Workstations 12 選擇創建虛擬機 2.在創建虛擬機…

    Linux干貨 2017-02-14
欧美性久久久久