文本處理工具以及grep

文本處理工具以及grep

我們在使用Linux系統的時候需要查看、分析或者統計文件,這時候我們就需要使用到文本處理工具。

我們先來看下幾個文本處理工具的使用:

文件內容:less和 cat

文件截?。篽ead和tail

按列抽?。篶ut

按關鍵字抽?。篻rep


我們先來看看less和cat

cat:查看文件命令

    用法:

    cat [OPTION]… [FILE]…

    參數: 

    -E: 顯示行結束符$

    [root@centos7 ~]# cat -E f1
    2390051ee07353113$
    1231238942389472341239847$
    0123weqeqqwe213312132123$
    039005170023123761$

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

     [root@centos7 ~]# cat -n f1
     1	2390051ee07353113			
     2	   
     3	1231238942389472341239847
     4	0123weqeqqwe213312132123
     5	039005170023123761

    -A:顯示所有控制符

    [root@centos7 ~]# cat -A f1
    2390051ee07353113^I^I^I$    這里的^I就是Tab
       $

     

    -b:非空行編號

    -s:壓縮連續的空行成一行(下面來看一下對比)

    [root@centos7 ~]# cat f2
    a
    
    
    
    a
    a
    [root@centos7 ~]# cat -s f2
    a
    
    a
    a

分頁查看文件內容:

more: 分頁查看文件

    more [OPTIONS…] FILE…

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

less:一頁一頁地查看文件或STDIN輸出 

    查看時有用的命令包括: 

    /文本 搜索 文本 

    n/N 跳到下一個 or 上一個匹配 less

    如下圖,輸入/of(搜索文中出現的of)

   文本1.png

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

顯示文本前或后行內容:

head 

    用法:

    head [OPTION]… [FILE]…

    -c #: 指定獲取前#字節

    -n #: 指定獲取前#行

    -#: 指定行數

tail

    用法:

    tail [OPTION]… [FILE]…

    (默認顯示10行)

    -c #: 指定獲取后#字節

    -n #: 指定獲取后#行

    -#:指定行數

    [root@centos7 ~]# tail -3 /etc/passwd
    rootash:x:2010:2010::/home/rootash:/bin/bash
    roobash:x:2011:2011::/home/roobash:/bin/bash
    zzzz:x:2012:2012::/home/zzzz:/bin/bash

    -f: 跟蹤顯示文件新追加的內容,常用日志監控

按列抽取文本cut和合并文件paste

cut

    用法:

    cut [OPTION]… [FILE]… 

    -d DELIMITER: 指明分隔符,默認tab 

    -f FILEDS: #: 第#個字段 

    #,#[,#]:離散的多個字段,例如1,3,6 

    #-#:連續的多個字段, 例如1-6 混合使用:1-3,7 

    -c 按字符切割 

    –output-delimiter=STRING指定輸出分隔符

例如顯示/etc/passwd前3行的用戶名和shell類型:
    [root@centos7 ~]# head -3 /etc/passwd | cut -d: -f1,7
    root:/bin/bash
    bin:/sbin/nologin
    daemon:/sbin/nologin

paste 

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

    用法: 

    paste [OPTION]… [FILE]… 

    -d 分隔符:指定分隔符,默認用TAB 

    -s : 所有行合成一行顯示 

    paste f1 f2 

    paste  -s f1 f2

分析文本的工具:

文本數據統計:wc 

整理文本:sort 

比較文件:diff和patch

收集文本統計數據wc:

    計數單詞總數、行總數、字節總數和字符總數 可以對文件或STDIN中的數據運行 

[root@centos7 ~]# wc f1
     32   31   383     f1
    行數 字數 字符數

    使用 -l 來只計數行數 

    使用 -w 來只計數單詞總數 

    使用 -c 來只計數字節總數 

    使用 -m 來只計數字符總數

文本排序sort:

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

     用法:

     $ sort [options] file(s) 

     常用選項 

     -r 執行反方向(由上至下)整理 

     -n 執行按數字大小整理 

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

     -u 選項(獨特,unique)刪除輸出中的重復行

     -t  c 選項使用c做為字段界定符 

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

 看下面的例子:
    [root@centos7 ~]# cat f2    先查f2文件的內容
    nologin:x:2009:2009::/home/nologin:/bin/bash
    rootash:x:2010:2010::/home/rootash:/bin/bash
    roobash:x:2011:2011::/home/roobash:/bin/bash
    zzzz:x:2012:2012::/home/zzzz:/bin/bash 
    [root@centos7 ~]# sort -r -t: -k3 f2    sort命令使用:做分隔符反向排列第三列
    zzzz:x:2012:2012::/home/zzzz:/bin/bash
    roobash:x:2011:2011::/home/roobash:/bin/bash
    rootash:x:2010:2010::/home/rootash:/bin/bash
    nologin:x:2009:2009::/home/nologin:/bin/bash

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

    用法:

    uniq [OPTION]… [FILE]… 

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

    -d: 僅顯示重復過的行; 

    -u: 僅顯示不曾重復的行; 

    連續且完全相同方為重復 ? 

    常和sort 命令一起配合使用: sort  userlist.txt  |  uniq -c

    [root@centos7 ~]# cat f2
    a
    a
    a
    
    
    a
    b
    a
    [root@centos7 ~]# sort f2 | uniq -c
      2 
      5 a
      1 b

比較文件:

    diff:

    [root@centos7 ~]# diff f2 f3
    2c2
    <  Kernel \r on an \m
    ---
    > Kernel \r on an \m
    注明第2行有區別

grep和正則表達式:

    grep: Global search REgular expression and Print out the line.即全局搜索正則表達式并打印出匹配的行。 

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

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

    grep用法:

    grep [OPTIONS] PATTERN [FILE…] 

    grep選項: 

    –color=auto: 對匹配到的文本著色顯示;

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

    -i: 忽略字符大小寫 

    -n:顯示匹配的行號 

    -c: 統計匹配的行數 

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

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

    -A #:after, 后#行 

    -B #: before, 前#行 

    -C #:context, 前后各#行

    -e:實現多個選項間的邏輯or關系 grep –e ‘cat ’  -e ‘dog’  file  

    -w:整行匹配整個單詞 

正則表達式:

    在編寫處理字符串的程序或網頁時,經常會有查找符合某些復雜規則的字符串的,正則表達式就是用于描述這些規則的工具。REGEXP:由一類特殊字符及文本字符所編寫的模式,其中有些字符(元字符)不表示字符字面意義,而表示控制或通配的功能。程序支持:grep, vim,less,nginx等。分兩類:基本正則表達式:BRE擴展正則表達式:ERE 。

    元字符分類:

    字符匹配

    匹配次數

    位置錨定

    分組 

基本正則表達式

字符匹配:

    .:匹配任意單個字符;

    [root@centos7 ~]# grep "r..t" /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/root:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    rootash:x:2010:2010::/home/rootash:/bin/bash

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

    [root@centos7 ~]# grep "r[a-z]t" /etc/passwd
    operator:x:11:0:operator:/root:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

    (這里一定要注意的是單個字符)

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

    [:digit:]數字     [:lower:]小寫字母

    [:upper:]大寫字母  [:alpha:]大小寫字母

    [:alnum:]字母和數字[0-9a-zA-Z]

    [:punct:]標點符號  [:space:]空白字符(空格和Tab)。

匹配次數:

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

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

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

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

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

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

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

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

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

位置錨定:

    定位出現的位置

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

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

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

    ^$: 空行 

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

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

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

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

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

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

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

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

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

        \2: string2 

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

egrep及擴展的正則表達式:

    egrep = grep -E 

    egrep [OPTIONS] PATTERN [FILE…] 

字符匹配:

    . 任意單個字符 

    [] 指定范圍的字符 

    [^] 不在指定范圍的字符

次數匹配: 

    *:匹配前面字符任意次 

    ?: 0或1次 

    +:1次或多次 

    {m}:匹配m次 

    {m,n}:至少m,至多n次

    位置錨定: 

    ^:行首

    $:行尾

    \<,\b:語首

    \>,\b:語尾

或者:a|b 

    C|cat: C或cat

    (C|c)at:Cat或cat

我們先熟悉了grep與正則表達式,現在我們來做幾個小實驗來看一下用法:

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

    [root@centos7 ~]# grep -v "/bin/bash$" /etc/passwd 
    (-v選項顯示不能夠匹配的項) (&行尾錨定)
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    ...

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

[root@centos7 ~]# grep "\<[0-9]\{2,3\}\>" /etc/passwd

圖圖1.png

顯示當前系統root、mage或zang用戶的UID和默認shell 

[root@centos7 ~]# egrep "^\<(root|mage|zang)\>" /etc/passwd | cut -d: -f1,3,7
    root:0:/bin/bash
    zang:1000:/bin/bash
    mage:19999:/bin/csh

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

[root@centos7 ~]# cat /etc/rc.d/init.d/functions | egrep "^[[:alnum:]_]+\(\)" 
checkpid() {
__pids_var_run() {
__pids_pidof() {
daemon() {
killproc() {
pidfileofproc() {
pidofproc() {
status() {
echo_success() {
echo_failure() {
echo_passed() {
echo_warning() {
update_boot_stage() {
success() {
failure() {
passed() {
warning() {
action() {
strstr() {
is_ignored_file() {
is_true() {
is_false() {

   

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

(0)
zanghongleizanghonglei
上一篇 2016-08-08
下一篇 2016-08-08

相關推薦

  • 三次握手和四次揮手

    TCP三次握手:                              &n…

    2017-09-02
  • 馬哥教育網絡班22期+第1周課程練習 忍者亂太郎喻成

    1.計算機組成:  根據馮諾依曼的計算機結構分為四大塊:控制器,運算器, 存儲器,輸入輸出設備 控制器:對其他的組件進行控制 運算器:用于處理計算工作,不控制輸入和輸出 儲存器:用于暫時或長期存儲數據 輸入輸出:與外界進行交互 個人延伸: 我的理解這是一個在計算機研發之前的一個理論假象, 相對現在真實的計算機體系,這個分類會比較模糊。 運算器:cp…

    Linux干貨 2016-08-15
  • 文件的查找

    文件的查找 使用locate命令 默認從根開始搜索 非實時查找(數據庫查找) locate 文件名 查詢系統上預建的的文件索引數據庫    /var/lib/mlocate/mlocate.db 依賴于事先構建的索引 索引的構建是在系統較為空閑時自動進行(周期性任務),管理員手動更新數據庫(updatedb)。注意工作中不能輕易…

    Linux干貨 2016-08-18
  • CentOS6.6上編譯安裝httpd2.4

    簡介    現在apache軟件基金會正在維護的httpd項目有三個版本,分別為Version 2.4,Version 2.2與Version 2.0。    三個版本的區別暫不一一介紹,有興趣的可以去httpd.apache.org了解,下面著重介紹httpd 2.4版本。新特性 &nb…

    Linux干貨 2015-06-26
  • 網絡配置——命令家族

    Linux網絡屬性配置命令: ifcfg家族:ifconfig,route,netstat ifconfig命令:接口及地址查看和管理          ·ifconfig [INTERFACE]       &nbsp…

    Linux干貨 2016-09-07
  • grep及正則表達式相關練習

    grep及正則表達式相關練習 1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其它用戶均沒有任何訪問權限。 ~]# cp -r /etc/skel/ /home/tuser1 ~]# chmod -R 700 /home/tuser1 ~]# ls -ld /home/tuser1 drwx&#821…

    Linux干貨 2016-10-11
欧美性久久久久