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 15:52
下一篇 2017-08-26 16:23

相關推薦

  • mongodb 分片集群搭建

    集群架構 本次實驗部署3臺主機node1、node2、node3,2個副本集db1、db2作為分片,3臺主機均有1個配置庫實例 操作步驟 安裝 node1上執行如下命令,完成后拷貝/mongodb目錄到node2、node3 useradd mongodb   mkdir -p /mongodb/data/{…

    Linux干貨 2016-11-06
  • 進程和進程管理工具

    進程的相關定義以及相關工具的使用

    2017-12-17
  • 走進Linux(二)

    Linux基礎知識 1、文件管理類命令 mkdir:創建空目錄 格式 mkdir [選項](可跟多個選項) 要創建的目錄名 選項 -p:遞歸創建多個目錄                             &nbsp…

    Linux干貨 2016-09-26
  • 組建RAID5重啟系統,出現md127的解決辦法

        我這里在組建RAID5之后重啟了系統,當時/dev/md0變成了/dev/md127。出現這問題主要是我沒有配置生成/etc/mdadm.conf文件,如果哪位伙伴出現類似我這種情況,而不是通過我這種方法解決的,希望能分享一下你的解決方法,謝謝。  先停止md127 [root@client3&nbs…

    Linux干貨 2016-01-05
  • keepalived+nginx 模型示例

    原理為: 調度器 利用 keepalived 保持高可用性,實現對系統的監控和VIP 的floating NGINX 利用upstream模塊進行調度 關鍵點: keepalived 對NGINX 狀態的監控: //利用配置文件中設定的腳本對調度器的nginx 進程的監控 實驗步驟: 基于上一篇LVS-DR架構來做,具體LVS-DR架構請參考上一篇 先設置主…

    2017-05-13
  • shell腳本編寫-3

    1、for循環 for 變量名 in  列表;do 循環體 done 執行機制:依次將列表中元素賦值給“變量名”;每次賦值后即執一次循環體;直到列表中元素耗盡循環結束 列表生成方式: (1) 直接給出列表 (2) 整數列表: (a){start..end} (b) $(seq [start [step]] end)  (3) 返回列表的命…

    Linux干貨 2016-08-18
欧美性久久久久