文本編輯sed

*** sed:Stream EDitor  流編輯器 一次處理一行內容

sed [option]…  'script'  inputfile…
常用選項:
     -n∶使用安靜(silent)模式。在一般 sed 的用法中,
        所有來自 STDIN的資料一般都會被列出到螢幕上。,加上 -n 參數后,
         則只有經過sed 特殊處理的那一行(或者動作)才會被列出來。

    -e∶直接在指令列模式上進行 sed 的動作編輯,多個動作;
    -f∶將 sed 的動作寫在一個檔案內, -f FILE 則可以執行 FILE 內的sed 動作;
    -r∶支持擴展正則表達式
    -i∶修改原文件,而不是由屏幕輸出。
    -i.bak 先做備份 再修改源文件;得到file.bak

常用命令:
     a∶新增,a \STR,而這些字串會在新的一行出現(目前的下一行)~
     i∶插入,i \STR,而這些字串會在新的一行出現(目前的上一行);
     c∶取代,c \STR,這些字串可以取代 n1,n2 之間的行!
     d∶刪除,d 后面通常不接;
     p∶列印,即將某個選擇的資料印出。通常 p 會與參數 sed -n 一起運作
     w  /PATH: 保存模式匹配的行至指定文件
     =: 為模式空間中的行打印行號
 
     s∶取代,直接進行取代,通常搭配正則
          # sed 's/要替換的字符串/新的字符串/g'   1,20s/old/new/g
         替換標記:
      g: 行內全局替換    3g  每行第3個字符起
      p: 顯示替換成功的行
      w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中

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

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

    (4) ~:步進
         1~2 奇數行
         2~2 偶數行

&代表前面匹配到的字符串  s/PATT/&/g
  

高級編輯命令:
     h : 把模式空間中的內容 覆蓋至保持空間中
     H : 把模式空間中的內容 追加至保持空間中
     g : 把保持空間中的內容 覆蓋至模式空間中
     G : 把保持空間中的內容 追加至模式空間中.
     x : 把模式空間中的內容到保持空間中的內容 互換,初始保持空間中為空
     n : 讀取下一行覆蓋模式空間中的行;#+1行已被讀取,接下來會讀#+2行;
     N : 讀取下一行并追加到模式空間中的行后面,使用\n分隔;一次讀2行
     d : 刪除模式空間中的內容
     D: 刪除模式空間中匹配的多行
  
#sed 'n;d'  顯示奇數行;先輸出模式空間中的行,再覆蓋讀取下一行,再執行d命令
#sed 'G' /etc/issue    在原有的每行后方添加一個空白行
#seq 3 | sed '1!G;h;$!d' 倒序輸出
  
  
# sed '2,$d' ab           #刪除 第二行到最后一行
# sed -n '$p' ab          #顯示 最后一行
# sed -n '/STR/p' ab      #查詢 包含STR所在所有行
# sed '1a tea\nor coffee' ab    #第一行后 增加多行,使用換行符\n
# sed '1,2c Hi' ab        #第一行到第二行 替換為Hi
# sed -i '$a bye' ab      #在原文件中最后一行輸入"bye"

# sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//' file   每行字符倒序顯示
# sed -r '/\n/!G;s/(.)(.*\n)/&\2\1/;//D;s/.//' file
 
# sed  -n '$=' he /PATH   #統計行數

將數字1234567顯示為1,234,567
    #echo "1234567" | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta'

\w匹配每個單詞,&代表前面匹配到的字符串
    #echo "i am zhou"|sed 's/\w\+/[&]/g'

#sed -n 'n;p' FILE 輸出偶數行
#sed '1!G;h;$!d' FILE  倒序輸出文本
#sed '$!N;$!D' FILE  輸出文本最后兩行
#sed '$!d' FILE     顯示最后一行
#sed 'G' FILE     每行后加一空白行
#sed 'g' FILE     輸出空白行,與文本相同行數
#sed '/^$/d;G'FILE 刪除空行,在每行后加一空行
#sed 'n;d' FILE  輸出奇數行
#sed -n '1!G;h;$p' FILE   倒序輸出文本

===練習:sed

1.刪除/etc/grub2.conf文件中所有以空白開頭的行行首的空白字符
    #sed 's/^[[:space:]]*//g' /etc/grub2.cfg

2.刪除/etc/fstab文件中所有以#開頭,后面至少跟一個空白字符的行的行首的#和空白字符
    #sed 's/^#[[:space:]]*//g' /etc/fstab

3.在/root/install.log每一行行首增加#號
    #sed 's/^/#/' /root/install.log
     #sed 's/.*/#&/'

4.在/etc/fstab文件中不以#開頭的行的行首增加#號
    #sed 's/^[^#].*/#&/' /etc/fstab

5.處理/etc/fstab路徑,使用sed命令取出其目錄名和基名
    #echo "/etc/rc.d/init.d/functions"|sed -r 's@(^/.*/)([^/]+/?)@\1\n\2@g'
    #echo "/etc/rc.d/init.d/functions"|sed -r 's@.*\<@@'    取基名

6.利用sed 取出ifconfig命令中本機的IPv4地址
    #ifconfig|sed -rn 's/.*r:((.*\.){3}.*) B.*/\1/p'
    #ifconfig|sed -rn 's/.*r:(.*) B.*/\1/p'

7.統計centos安裝光盤中Package目錄下的所有rpm文件的以.分隔倒數第二個字段的重復次數
    #ls /tmp/Packages/|sed -nr 's/.*\.(.*)\..*$/\1/p'|sort|uniq -c

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

(0)
JasperJasper
上一篇 2016-08-10 10:27
下一篇 2016-08-10 10:27

相關推薦

  • 文本處理工具及grep命令的理解與使用

    1. 文本處理工具   1.1 文件查看命令cat tac     cat命令:連接文件并在標準輸出上面顯示出來  圖 1-1   cat幫助文檔        cat [option]…[file]…     &n…

    Linux干貨 2016-08-07
  • linux基礎之bash特性知識點

    1、 Linux上的文件管理類命令都有哪些,其常用的使用方法及其相關示例演示。     Linux 一切皆文件。個人理解 在linux下的命令操作都算是對文件操作     那么文件管理命令類命令可以分為下面幾類     目錄操作: &nbs…

    Linux干貨 2016-09-24
  • loganalyzer——日志分析工具

    Loganalyzer是一款syslog日志和其他網絡事件數據的Web前端。它提供了對日志的簡單瀏覽、搜索、基本分析和一些圖表報告的功能。數據可以從數據庫或一般的syslog文本文件中獲取,所以LogAnalyzer不需要改變現有的記錄架構?;诋斍暗娜罩緮祿?,它可以處理syslog日志消息,Windows事件日志記錄,支持故障排除,使用戶能夠快速查找日志數…

    Linux干貨 2016-10-18
  • IoC/DIP其實是一種管理思想

    關于IoC的的概念提出來已經很多年了,其被用于一種面象對像的設計。我在這里再簡單的回顧一下這個概念。我先談技術,再說管理。 話說,我們有一個開關要控制一個燈的開和關這兩個動作,最常見也是最沒有技術含量的實現會是這個樣子: 然后,有一天,我們發現需要對燈泡擴展一下,于是我們做了個抽象類: 但是,如果有一天,我們發現這個開關可能還要控制別的不單單是燈泡的東西,我…

    Linux干貨 2016-08-15
  • 馬哥教育網絡班21期+第9周課程練習

    1、寫一個腳本,判斷當前系統上所有用戶的shell是否為可登陸shell(即用戶的shell不是/sbin/nologin);分別這兩類用戶的個數;通過字符串比較來實現; #!/bin/bash while read line; do     if [[ $line&n…

    Linux干貨 2016-09-01
  • Linux下搭建路由器

    客戶端1:CentOS6.9 客戶端2:CentOS7.3 路由器:router1(CentOS7.3)、router2(CentOS7.3) r router3(CentOS7.3) 1 準備工作 為了避免干擾,最好建立獨立的網絡。 打開VMvare的虛擬網絡編輯器,點擊添加網絡按鈕,添加VMnet11并且將左下角使用“本地DHCP服務將IP地址分配給虛擬…

    Linux干貨 2017-08-20

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-10 15:37

    文章偏相于筆記,可以嘗試著寫上sed的工作原理,及自己在操作過程中的遇到的錯誤,總之一句話,要理論結合實踐

欧美性久久久久