文本處理三劍客之sed

sed 用法

sed [option]... 'script' inputfile ... 

常用選項

  • -n  關閉自動打印
  • -e 多點編輯
  • -f  /PATH/SCRIPT 從指定文件中讀取編輯腳本
  • -r 支持使用擴展表達式
  • -i.bak 備份文件並原處編輯

script 

   地址命令

地址定界

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

(2)單地址:

  •       #:指定的行,$: 最後一行
  •      /pattern/: 被此處模式所能夠匹配到的每一行

(3)地址範圍:

  •     #,#   第幾行到第幾行
  •    #,+#   第幾行到後面的幾行
  •    /pat1/, /pat2/  正則表達式,可以搜索日誌中幾點幾分到幾點幾分的日誌內容
    • 例如 sed -n '/^2020-02-29 03:23:34 /,/^2020-02-29 04:13:24/'  xxx.log  舉例就不一而足了
  •    #,/pat1/

 (4)~:步進

  • 1~2 奇數行 步進2
  • 2~2偶數行  步進2

      想不起來這個命令的適用場景,後面再補充吧

編輯命令

  • d        刪除模式空間匹配的行,並立即啓用下一輪循環
  • p       打印當前模式空間內容,並追加到默認輸出之後
  • a[\]text 在指定行後面追加文本,支持使用\n實現多行追加
  • i[\]text 在行前面插入文本
  • c[\]text 替換行爲單行或多行文本
  • w /path/file 保存模式匹配的行至指定文件
  • r /path/file 讀取指定文件的文本至模式空間中匹配到的行後
  • =     爲模式空間中的行打印行號
  • !     模式空間中匹配行取反處理
  • s///   查找替換,支持使用其它分隔符,s@@@, s###替換標記
  • ——替換標記
    • g  行內全局替換
    • p 顯示替換成功的行
    • w /PATH/FILE

sed 示例  注意直接粘貼在shell窗口上會無法執行,是因爲空格字符的問題

  • cp /etc/passed passwd
  • sed  '2p' passwd  打印第二行,並且全部打印
  • sed  -n '2p' passwd 只打印第二行
  • sed  -n '1,4p' passwd 打印1-4行
  • sed  -n '/root/p' passwd 打印包含root的行
  • sed  -n '2,/root/p' passwd  從第二行開始,打印包含root的行
  • sed  -n '/^$/=' passwd  顯示空行行號,ps (=     爲模式空間中的行打印行號)
  • sed 'root/a\superman' passwd  行後
  • sed 'root/i\superman' passwd  行前
  • sed 'root/c\superman' passwd  代替行
  • sed '/^$/d' file  刪除空格行
  • sed '1,10d' file 刪除1-10行
  • nl  passwd|sed '2,5d'  刪除2-5行
  • nl  passwd|sed '2a tea'   在第二行新增一個tea(茶葉單詞)
  • sed 's/test/mytest/g' file 全局替換 test -> mytest
  • sed -e 's/test/mytest/'  's/dog/cat/ ' pets   多點編輯
  • sed -i.bak 's/test/mytest/g' file  替換前先生成一個備份文件file.bak

參考:http://www.gnu.org/software/sed/manual/html_node/Overview.html#Overview

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章