Linux文本處理三劍客之一sed

這周我們學習了文本處理工具三劍客之一的sed,對于之前學的grep同樣的重要,也同樣是一個難點。sed是針對一個文件或者多個文件一行一行處理的,它處理的時候,把當前處理的行存儲在模式空間,處理完成后,把緩沖區內容輸出到屏幕上,接著處理下一行。直到文件末尾。原文件并沒有經過更改。

1、sed一些常用的選項

    -n 不輸出模式空間的內容到屏幕上,相當于靜默模式

    -e 多點編輯模式,可以對一行內容進行多點處理

    -f 把script寫到文件當中,在執行sed時-f指定文件路徑,如果是多個script,換行寫

    -r 支持使用擴展的正則表達式

    -i.bak 編寫的文件寫入文件之前備份原文件(-i是直接對原文件進行修改)

2、sed 中的script,地址定界

    不給地址:對全文處理

    單地址:#指定的行

                /pattern/  被此處模式所能夠匹配到的每一行  

    地址范圍:#,#    

                    #,+#   

                    /pat1/,/pat2/   

                    #,/pat1/ 

    跳行: sed -n ‘1~2p’   只打印奇數行

               sed -n ‘2~2p’   只打印偶數行

               sed -n ‘1~3p’   從第1行開始,每隔3行顯示一次

    Linux文本處理三劍客之一sed

3、sed編輯命令

    d:刪除模式空間匹配的行,并立即啟用下一輪循環

    p: 打印當前模式空間內容,追加到默認輸出之后

    a\text:在指定行后面追加文本,支持使用\n實現多行追加

    i\text:在行前面插入文本

    c\text:替換行為單位或多行文本

    w 新文件路徑:保存模式匹配的行至指定文件

    r 文件路徑:讀取指定文件的文本至模式空間中匹配到的行后

    Linux文本處理三劍客之一sed

    =:為模式空間中的行打印行號

    !:模式空間中匹配行取反處理

    s///:查找替換,支持使用其它分隔符,s@@@      s###

    g:行內全局替換

4、sed高級編輯命令

    h: 把模式空間中的內容覆蓋至保持空間中

    H:把模式空間中的內容追加至保持空間中

    g: 從保持空間取出數據覆蓋至模式空間

    G:從保持空間取出內容追加至模式空間

    x: 把模式空間中的內容與保持空間中的內容進行互換

    n: 讀取匹配到的行的下一行覆蓋至模式空間

    N:讀取匹配到的行的下一行追加至模式空間

    d: 刪除模式空間中的行

    D:刪除當前模式空間開端至\n的內容(不再傳至標準輸 出),放棄之后的命令,但是對剩余模式空間重新執行sed

5、練習

    (1)刪除centos7系統/etc/grub2.cfg文件中所有以空白開頭 的行行首的空白字符

    Linux文本處理三劍客之一sed

    紅色標記為:將以空白字符開頭并且重復一次以上的內容刪除

    (2)刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空 白字符的行的行首的#和空白字符

    Linux文本處理三劍客之一sed

    紅色標記為:以#開頭后面跟空白字符并且重復一次以上的內容刪除

    (3)在centos6系統/root/install.log每一行行首增加#號
    Linux文本處理三劍客之一sed

    內容太長所以我就只截取了前十行

    紅色標記為:開頭的內容替換為#號

    (4)在/etc/fstab文件中不以#開頭的行的行首增加#號
    Linux文本處理三劍客之一sed

    紅色標記為:以非#號開頭的前面加一個#號,如果不加&則不是#開頭的第一個字母也會被覆蓋

    (5)處理/etc/fstab路徑,使用sed命令取出其目錄名和基名
    Linux文本處理三劍客之一sed

    第一個括號里面代表的是目錄名,第二個括號里面是基名,這里引用一個后向引用

    (6)利用sed 取出ifconfig命令中本機的IPv4地址
    Linux文本處理三劍客之一sed

    紅色標記的為:取出eth0里面的第二行

    藍色標記的為:以addr:之前的內容刪除

    黃色標記的為:以  Bcast后面的內容全部刪除

    (7)統計centos安裝光盤中Package目錄下的所有rpm文件的 以.分隔倒數第二個字段的重復次數
    Linux文本處理三劍客之一sed

    黃色標記的為:因為Packages里面有一行TRANS.TBL所以我們要把這行刪除

    紅色標記的為:里面的小括號是兩個.中間的內容

                          里面的大括號是全部內容。

                          這里我們引用一個后向引用,只要.rpm前面的內容不包括.的

    (8)統計/etc/init.d/functions文件中每個單詞的出現次數, 并排序(用grep和sed兩種方法分別實現)
    用grep:

    Linux文本處理三劍客之一sed

    紅色標記的為:只截取以大小寫字母重復至少一次的內容,錨定了一下,中間就不會有別的任何字符

    用sed:

    Linux文本處理三劍客之一sed 

    紅色標記的為:任何非英文的重復一次以上的換行

    黃色標記的為:刪除空行

    (9)將文本文件的n和n+1行合并為一行,n為奇數行
    Linux文本處理三劍客之一sed

    紅色標記的為:讀第一行的時候直接把第二行也追加到模式空間里面的第一行下面,然后在模式空間里面把第一行和第二行的換行符刪掉,完成后輸出出來。接下來讀取第三行的時候同第一行一樣,直接把第四行追加到模式空間第三行的下面

    還有一種方法如下:  

    cat -n /etc/passwd |sed -n ‘1~2p’  > /app/file1                將/etc/passwd里面的奇數行取出來放到file1文件中

    cat -n /etc/passwd |sed -n ‘2~2p’  > /app/file2                將/etc/passwd里面的偶數行取出來放到file2文件中

    paste -d “” file1 file2                                                     把file1  file2文件合并為一個文件顯示出來

    Linux文本處理三劍客之一sed

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

(0)
In summerIn summer
上一篇 2017-08-26
下一篇 2017-08-26

相關推薦

  • mysql cluster安裝部署

    一、安裝要求 安裝環境:CentOS-6.5-32bit 軟件名稱:mysql-cluster-gpl-7.2.25-linux2.6-i686.tar.gz 下載地址:http://mysql.mirror.kangaroot.net/Downloads/ 軟件包:mysql-cluster-gpl-7.2.25-linux2.6-i686.tar.gz …

    Linux干貨 2016-08-22
  • Linux文件管理相關及命令別名、執行狀態等

    Linux文件管理相關命令有:cp,mv,rm         文件查看類命令有:cat,tac,head,tail,more,less         接下來,逐個介紹:   &…

    Linux干貨 2016-11-04
  • 2016.08.04學習筆記

    文本管理工具     1.cat:查看文件,讀取鍵盤輸入         -A:查看文件所有信息         -n:顯示行數   &nb…

    Linux干貨 2016-08-08
  • iptables 從入門到進階

    Linux的防火墻體系主要工作在網絡層,針對TCP/IP數據包實施過濾和限制,屬于典型的包過濾防火墻(或網絡層防火墻)。在Linux中netfilter和iptables都是指Linux防火墻。區別在于: netfilter:指的是Linux內核中實現包過濾防火墻的內部結構,不以程序或文件的形式存在,屬于“內核態”的防火墻功能體系。 iptables:指的是…

    Linux干貨 2017-01-10
  • linux系統自動化安裝和selinux

    系統自動化安裝: Anaconda 安裝系統分成三個階段:  安裝前配置階段安裝過程使用的語言鍵盤類型安裝目標存儲設備Basic Storage :本地磁盤特殊設備:iSCSI設定主機名配置網絡接口時區管理員密碼x設定分區方式及MBR 的安裝位置創建一個普通用戶選定要安裝的程序包 創建引導光盤:#cp /media/cdrom/isoli…

    Linux干貨 2017-04-06
  • MySQL優化大全

     1. 優化SQL   1)通過show status了解各種sql的執行頻率         show status like 'Com_%'        了解 Com_select,Com_in…

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