文本編輯工具Sed

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

sed工具
用法:
sed [option]… 'script' inputfile…
常用選項:
         -n:不輸出模式空間內容的自動打印
         -e: 多點編輯,可以對一個文檔進行多次處理
         -f /PATH/TO/SCRIPT_FILE: 從指定文件中讀取編輯腳本
         -r: 支持使用擴展正則表達式
         -i: 對文件進行直接編輯
script:
        格式:'地址命令'

sed工具
    地址定界:
      (1) 不給地址:對全文進行處理
      (2) 單地址:
         #: 指定的行
         /pattern/:被此處模式所能夠匹配到的每一行,可以寫正則表達式或一些模糊匹  配的字符。
      (3) 地址范圍:
         #,#

blob.png 

blob.png    

     #,+#

blob.png   

      /pat1/,/pat2/     搜索從pat1開始到pat2結束的行進行編輯

blob.png 

f2文件中以root開頭,以bash結束的行


         #,/pat1/

blob.png 

f2文件中第一行到,有wang的行。
      (4) ~:步進
         1~2 奇數行

blob.png  

       2~2 偶數行

blob.png
sed工具
編輯命令:
d: 刪除模式空間匹配的行

blob.png 

刪除模式空間中的第一行,但是只刪除了f2文件模式空間中的第一行,f2文件中的第一行并沒有刪除。
p: 顯示模式空間中的內容

blob.png 

   先全部顯示模式空間中的內容,再把第一行再顯示一遍。可以加-n過濾。
a \text:在行后面追加文本;支持使用\n實現多行追加

blob.png 

在行后添加文本


i \text:在行前面插入文本;支持使用\n實現多行插入

blob.png 

實現\n的多行插入

blob.png
c \text:替換行為單行或多行文本

blob.png 

f1模式空間中的內容替換為test。
w /path/to/somefile: 保存模式匹配的行至指定文件

blob.png 

f1模式空間中的第一行轉存到/testdir/f22文件中。
r /path/from/somefile:讀取指定文件的文本至模式空間中匹配到的行后

blob.png 

/testdir/f3中的China,打印到f1文件的行后。

上圖中,將f3中的China打印到f1中,只是在模式空間中做了修改,并沒有在源文件f1中作修改,要想在源文件中做修改用-i選項

blob.png 

若真想修改,可以先做個備份,用選項“.bak”  其中,bak這個后綴可以隨便起,下圖中的含義是在修改f1文件時,會先給f1文件作備份,產生一個f1.bak的新文件來存放f1原來的數據。之后才會將f3中的內容寫入f1中。

blob.png
=: 為模式空間中的行打印行號
!:模式空間中匹配行取反處理
blob.png

將除了含有wang的行打印行號。


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

blob.png 

查找出root,替換為ROOOT。

替換標記:
g: 行內全局替換

blob.png 

f1文件中的所有小寫字母替換成A。
p: 顯示替換成功的行


w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中

blob.png 

將行首為r的行打印并存儲到/testdir/f11文件中。

sed示例
sed ‘2p’ /etc/passwd

打印/etc/passwd的第二行
sed –n ‘2p’ /etc/passwd

不顯示模式空間中的內容,打印/etc/passwd的第二行
 sed –n ‘1,4p’ /etc/passwd

不顯示模式空間中的內容,打印/etc/passwd的第一行到第四行
 sed –n ‘/root/p’ /etc/passwd

不顯示模式空間中的內容,打印以root為行首的行
 sed –n ‘2,/root/p’ /etc/passwd

從第二行開始匹配到root結束的行
 sed -n ‘/^$/=’ file

顯示空行行號
 sed –n –e ‘/^$/p’ –e ‘/^$/=’ file

不顯示模式空間中的內容,打印空行,并顯示空行行號


 sed ‘/root/a\superman’ /etc/passwd

搜索包含root的行后打印Superman
 sed ‘/root/i\superman’ /etc/passwd 行前

搜索包含root的行前打印superman
 sed ‘/root/c\superman’ /etc/passwd

搜索包含root的行,替換為superman

sed示例
 sed ‘/^$/d’ file

打印文件的空行
 sed ‘1,10d’ file

打印文件的一到十行
 nl /etc/passwd | sed ‘2,5d’

打印/etc/passwd文件中的二到五行
nl /etc/passwd | sed ‘2a tea’

打印/etc/passwdde 第二行下加tea
 sed 's/test/mytest/g' example

替換exampletestmytest
 sed –n‘s/root/&superman/p’ /etc/passwd

root后面添加superman
 sed –n‘s/root/superman&/p’ /etc/passwd

root前面添加superman
 sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets

替換pets文件的模式空間中的dogcat,hilo
 sed –i.bak ‘s/dog/cat/g’ pets

編輯pets文件,全部將dog替換為cat,并備份


 

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

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

相關推薦

  • MySQL-MMM安裝指南(Multi-Master Replication Manager for MySQL)

    最基本的MMM安裝必須至少需要2個數據庫服務器和一個監控服務器下面要配置的MySQL Cluster環境包含四臺數據庫服務器和一臺監控服務器,如下: function ip hostname server id monitoring host 192.168.0.10 mon – master 1 192.168.0.11 db1 1 maste…

    Linux干貨 2015-05-01
  • Linux源碼包安裝詳解

    安裝源碼包 安裝一個源碼包,是需要我們自己把源代碼編譯成二進制的可執行文件。如果你讀得懂這些源代碼,那么你就可以去修改這些源代碼自定義功能,然后再去編譯成你想要的。使用源碼包的好處除了可以自定義修改源代碼外還可以定制相關的功能,因為源碼包在編譯的時候是可以附加額外的選項的。 源碼包的編譯用到了linux系統里的編譯器,常見的源碼包一般都是用C語言開發的,這也…

    Linux干貨 2016-09-06
  • Linux用戶及權限管理

    Linux用戶及權限管理 當我們用ls -al查看一個文件的詳細信息的時候會顯示出一個有七個字段的文件詳細信息,現在我們來了解下這七個字段各自代表的意義 drwxr-xr-x 18 root root 4096 12月 16 15:25 .config 我們先來說明這七段分別表示什么每個字段我們用 | 隔開 drwxr-xr-x | 18 | root | …

    Linux干貨 2016-12-19
  • 日志管理

    rsyslogd的相關介紹,journalctl的相關介紹和日志的轉儲

    2018-02-05
  • M20 – 1- 第二周(2):課堂練習與作業

    課堂練習: 1、顯示/var目錄下所有以l開頭,以一個小寫字母結尾,且中間出現至少一位數字的文件和目錄 [root@centos6 ~]# ls /var/l*[[:digit:]]*[[:lower:]] ls: cannot access /var/l*[[:digit:]]*[[:lower:…

    Linux干貨 2016-08-02

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-08-10 17:05

    對于sed一些常見的用法給處理分析與羅列,script包括兩部分:地址定界+編輯命令

欧美性久久久久