文本處理三劍客之一的sed

處理文本的工具sed

  • Stream EDitor, 行編輯器

  • sed是一種流編輯器,它一次處理一行內容。處理時,把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。文件內容并沒有改變,除非你使用重定向存儲輸出。Sed主要用來自動編輯一個或多個文件,簡化對文件的反復操作,編寫轉換程序等

  • 用法

    • sed[option]… ‘script’ inputfile…
  • 常用選項

    • -n:不輸出模式空間內容到屏幕,即不自動打印
    • -e: 多點編輯
    • -f:/PATH/SCRIPT_FILE: 從指定文件中讀取編輯腳本
    • -r: 支持使用擴展正則表達式
    • -i.bak: 備份文件并原處編輯
  • 地址定界

    • (1) 不給地址:對全文進行處理
    • (2) 單地址:

      • #: 指定的行
      • /pattern/:被此處模式所能夠匹配到的每一行
    • (3) 地址范圍:

      • #,#
      • #,+#
      • /pat1/,/pat2/
      • #,/pat1/
    • (4) ~:步進

      • 1~2 奇數行
      • 2~2 偶數行
  • 編輯命令

    • d: 刪除模式空間匹配的行
    • p: 顯示模式空間中的內容
    • a []text:在指定行后面追加文本,支持使用\n實現多行追加
    • i[]text:在行前面插入文本
    • c []text:替換行為單行或多行文本
    • w /path/somefile: 保存模式匹配的行至指定文件
    • r /path/somefile:讀取指定文件的文本至模式空間中匹配到的行后
    • =: 為模式空間中的行打印行號
    • !:模式空間中匹配行取反處理
    • s///:查找替換,支持使用其它分隔符,s@@@,s###

      • 替換標記

        • g: 行內全局替換
        • p: 顯示替換成功的行
        • w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中
  • 高級編輯命令:

    • h: 把模式空間中的內容覆蓋至保持空間中
    • H:把模式空間中的內容追加至保持空間中
    • g: 從保持空間取出數據覆蓋至模式空間
    • G:從保持空間取出內容追加至模式空間
    • x: 把模式空間中的內容與保持空間中的內容進行互換
    • n: 讀取匹配到的行的下一行覆蓋至模式空間
    • N:讀取匹配到的行的下一行追加至模式空間
    • d: 刪除模式空間中的行
    • D:刪除當前模式空間開端至\n的內容(不再傳至標準輸出),放棄之后的命令,但是對剩余模式空間重新執行sed

sed示例

  • 取奇數行

    • seq 10|sed -n ‘1~2p’
    • seq 10|sed ‘2~2d’
    • seq 10 |sed -n ‘2~2!p’
    • seq 10 |sed ‘n;d’
  • 取偶數行

    • seq 10 |sed -n ‘n;p’
  • 取IP

    • ifconfig eth0|sed -n 2p|sed -e ‘s/.r://’ -e ‘s/ B.//’
    • ifconfig eth0|sed -e ‘s/.inet addr://’ -e ‘s/ B.//’ -n -e 2p
    • ifconfig eth0|sed ‘2!d;s/^.r://;s/ .//’
  • 取基名

    • echo /etc/sysconfig/network-scripts/ |sed -r ‘s@(/.*/)([/]+/?)@\2@’
  • 取目錄名

    • echo /etc/sysconfig/network-scripts/ |sed -r ‘s@(/.*/)([/]+/?)@\1@’
  • 對/etc/fstab非#開頭的加注釋

    • sed -r ‘s/([#])/#\1/’ /etc/fstab
    • sed -r ‘s/[#]/#&/’ /etc/fstab
  • 倒序顯示

    • seq 10 |sed ‘1!G;h;$!d’

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

(0)
XIAJIDONGXIAJIDONG
上一篇 2017-04-27 15:11
下一篇 2017-04-27 19:20

相關推薦

  • Linux基礎–命令幫助的獲取及history歷史命令

    第一部分    Linux系統如何獲取命令幫助     1、命令類型以及簡單幫助的獲取         linux系統上,基本命令分為兩類,一類是內建命令,一類是外部命令。所謂內建命令,是指由linux內核自帶的系統命令…

    Linux干貨 2016-07-28
  • LVS專題: NAT和DR模型實現Web負載均衡

    LVS專題: NAT和DR模型實現Web負載均衡 前言: NAT實現 Real Server配置 Director配置 測試 實驗拓撲 實驗環境 實驗步驟 DR實現 Director配置 Real Server配置 測試 實驗拓撲 實驗環境 實驗步驟 總結: 前言: 在上篇文章中我們講了一些LVS的基本概念和相應模型的實驗原理和流程,本篇文章我們主要使用lv…

    2016-04-05
  • CetnOS6啟動流程以及LVM下的fstab及boot恢復實驗

    centos6啟動流程 主動讀取BIOS,通過CMOS加載硬件信息 ,并進行POST,指定第一個可啟動的設備 ROM:BIOS,Basic Input and Output System,保存著計算機系統最重要的基本輸入輸出程序,系統信息設置,開機加電自檢程序RAM:保存各項參數的設定 讀取第一個可啟動設備MBR的引導加載程序(grub)的啟動信息 MBR:…

    Linux干貨 2017-05-13
  • bash腳本之練習

    1、編寫服務腳本/root/bin/testsrv.sh,完成如下要求  (1) 腳本可接受參數:start, stop, restart, status  (2) 如果參數非此四者之一,提示使用格式后報錯退出 (3) 如是start:則創建/var/lock/subsys/SCRIPTNAME, 并顯示“啟動成功” 考慮:如果事先已經啟…

    Linux干貨 2016-08-24
  • RAID級別介紹

    raid分為軟raid和硬raid,一般公司使用硬raid,數據無價。 存數據都是先存到內存,后同步到硬盤,為提高raid卡的性能會在raid嵌入內存顆粒。 但是問題是斷電后內存的數據沒有同步到硬盤會丟失,這樣就會有raid卡電池。(raid卡必須有raid電池) 計算機只識別raid卡,不會識別raid卡下有幾塊硬盤 raid 0:  (條帶式)…

    Linux干貨 2016-03-22
  • 用戶權限過濾練習(w4)

    1、復制/etc/skel目錄為/home/tuser1,要求/home/tuser1及其內部文件的屬組和其他用戶均沒有任何訪問權限。 [root@keyou ~]# cp -r /etc/skel/ /home/tuser1 | chmod -R g-rwx,o-rw…

    系統運維 2016-11-20
欧美性久久久久