歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux教程

Linux sed 流編輯器的一些應用實例

1. 首先注意sed的作用是什麼?本質是什麼?本質就是自動的編輯器!也就是在腳本代碼
 
  中進行控制的!使編輯文件的過程自動化,以便用“批處理”方式編輯文件
2.    sed是基於行的,因此按順序對每一行執行命令。
3.    參數
    sed: invalidoption -- h
    用法: sed[選項]... {腳本(如果沒有其他腳本)} [輸入文件]...

    -n, --quiet,--silent
                取消自動打印模式空間
                也就是所有的顯示都是由自己控制的!!!
     -e 腳本,--expression=腳本
                添加“腳本”到程序的運行列表
    -f 腳本文件,--file=腳本文件
                添加“腳本文件”到程序的運行列表
    -i[擴展名],--in-place[=擴展名]
                直接修改文件(如果指定擴展名就備份文件)
    -l N,--line-length=N
                指定“l”命令的換行期望長度
   --posix
                關閉所有 GNU 擴展
    -r,--regexp-extended
                在腳本中使用擴展正則表達式
    -s,--separate
                將輸入文件視為各個獨立的文件而不是一個長的連續輸入
    -u,--unbuffered
                從輸入文件讀取最少的數據,更頻繁的刷新輸出
   --help    打印幫助並退出
   --version  輸出版本信息並退出

    如果沒有 -e,--expression, -f 或 --file 選項,那麼第一個非選項參數被視為
   sed腳本。其他非選項參數被視為輸入文件,如果沒有輸入文件,那麼程序將從標准
   輸入讀取數據。

4.    sed -e'1,10d' ping.sh >1   
    # 將ping.sh中逐行讀取到緩沖區,刪除ping.sh文件中1-10行,然後重定向到1文件中

5.    sed -e'/^#/d' ping.sh > 1  
    #將ping.sh中逐行讀取到緩沖區,刪除ping.sh文件中第一個字符是#的行,然後重定向到
    1文件中

6.    sed -e'/"/d' ping.sh > 1        
    # 刪除有 "的行,並輸出到1文件

7.   字符        描述
   ^       與行首匹配
   $       與行末尾匹配
   \w     與任一個字符匹配
   *        將與 前一個字符的零或多個出現匹配
    []       與 [ ] 之內的所有字符匹配

8.   下面是幾個示例:
   規則表達式        描述
   /./             將與包含至少一個字符的任何行匹配           
   ---> 也就是說只要有一個字符的行都會輸出
  
   /../            將與包含至少兩個字符的任何行匹配           
   ---> 也就是說只要有兩個字符在一起及以上的都會刪除
  
   /^#/           將與以 '#'開始的任何行匹配                 
   ---> 匹配開頭( ^ ) 以#的行刪除
  
   /^$/          將與所有空行匹配                          
   ---> 也就是開頭結尾沒有東西,所以就是空行刪除
   ---> sed -e '/^$/d' ping.sh | wc -l >1 將非空行的函數輸入到文件1( 刪除空行,剩下
        的結果輸出到文件 )
  
   /}$/           將與以'}'(無空格)結束的任何行匹配        
   ---> sed -e '/}$/d' ping.sh >1          以 }結束的行
  
    /}*^/           將與以 '}' 後面跟有零或多個空格結束的任何行匹配  
  
   /[abc]/          將與包含小寫'a'、'b' 或 'c'的任何行匹配     
   ---> sed -e '/[a-z]/d' ping.sh >1         將有a-z字母的行都去掉
  
   /^[abc]/        將與以 'a'、'b'或 'c'開始的任何行匹配        
   ---> sed -e '/[a-z]/d' ping.sh >1         將開頭是a-z的行都刪除
  
  
9.    sed -n -e'/{/,/}/p' ping.sh >1                          
   ----> 注意這是輸出命令(p),是輸出{}之間的內容
    請注意新的 '-n'選項,該選項告訴 sed 除非明確要求打印模式空間,否則不這樣做。
    您還會注意到,我們用'p' 命令替換了 'd' 命令,如您所猜想的那樣,這明確要求 sed
   打印模式空間。就這樣,將只打印匹配部分。
  
10.    sed -n -e'/judge[[:space:]]*(/, /^}/p'  ping.sh>1           
   ----> 輸出judge函數的所有內容
   
11.    如何使用 sed來執行字符串替換、創建更大的 sed 腳本以及如何使用 sed 的附加、插
   入和更改行命令。

12.    替換:
    sed -e's/echo/oche/'     ping.sh > 1                    
   ----> s前綴就是替換命令,就是將ping.sh中出現的echo替換為oche
   ----> 同時注意:只替換每行第一次出現的哦~
   ----> 請注意:這條命令沒有改變源文件中的內容,而下面的就是可以的
                                                        
    sed -e's/echo/oche/g'  ping.sh >1                    
   ----> 將所有的出現的都替換  ( 全局替換吧 )
  
  
   我們需要知道的是,s/// 是一個命令哦,是不可分割的呗~所以我們可以與其他的命
    令一起使用!
    sed -e '1,10s/echo/ohce/g'  ping.sh > 1
   ----> 也就是只處理1-10行( 包括1和10 )
   注意:我們要知道的是:1和10指定的行結束,我們也可使用特殊的字符串結束!如
    下:
   sed  -e '/^$/, /^}/s/echo/ohce/g'  ping.sh > 1
   ----> 由空行開始執行,直到遇到 } 開始的行結束
  
    注意:我們並沒有硬性規定一定是s、/組合,這只是常規的用法,當然也可以使用別的
    字符,例如
    sed -e 's:echo:ooo:g' ping.sh >1      也是可以的哦~
    但是一般在替換的字符串中有/才用這樣的方法
    例如:
    sed -e 's:pt/ss.ps:pt/ss:g' ping.sh > 1
  
  
13.    sed -e's/<.*>//g' ping.sh >1
   ---->將<>形式替換成空格!注意其中有一個 ' . ',所以最少是一個字符哦~
  
   但是你自己運行一下,這是你需要的結果嗎?!!!!
   顯然不是不是嗎?
   在我的測試代碼中的內容是:
    # pt/ss/ps    <>  <> <>  <sdjsdvb>  <...>  <yyyy>
    # <z>
   
    那我本來想留下的結果是:
    #  pt/ss/ps
    #
    但是很不幸的是結果是:
    #  pt/ss/ps
    這就是s///的處理機制不一樣呗~!那麼他會尋找最長的字符串,我們需要怎麼作
    呢!?
    sed -e's/<[^>]*>//g' ping.sh > 1
    中間是>的後面不處理
    注意:有一些shell是不支持的!
   
14.  
   注意下面代碼的不同:
    對於處理這樣一行:<yjasbhdcjsd>  <a>
    sed -e's/<[a-z]>//g' ping.sh>1                #注意此處只是匹配一個字符而已
    和
    sed -e's/<[a-z]*>//g' ping.sh>1             #此處匹配以字符開頭的多個字符
   
  
15.  
    這將匹配零或多個全部為'a'、'b'、'c'...'v'、'w'、'x' 的字符。另外,可以使用
    '[:space:]'字符類來匹配  
   空格。以下是可用字符類的相當完整的列表:
   字符類            描述
   [:alnum:]           字母數字 [a-zA-Z 0-9]
   [:alpha:]           字母 [a-zA-Z]
   [:blank:]           空格或制表鍵
   [:cntrl:]              任何控制字符
   [:digit:]              數字[0-9]
   [:graph:]          任何可視字符(無空格)
   [:lower:]             小寫[a-z]
   [:print:]              非控制字符
   [:punct:]           標點字符
   [:space:]           空格
   [:upper:]           大寫[A-Z]
   [:xdigit:]           十六進制數字 [0-9a-fA-F]  
  
  
16.   高級替換功能
   我們現在想在所有的行前面加上MM,那麼怎麼處理呢?是所有的行哦~  
    sed -e's/.*/MM: &/g' ping.sh >1     
   ----> 就是 & 符號處理

Copyright © Linux教程網 All Rights Reserved