《Sed 和 Awk》(第二版)學習系列之第五章

 

第五章 基本sed命令

1. sed命令的基本語法:

(1)    行地址是可選的,它可以是一個模式,被描述爲由斜槓,行號或者行尋址符號括住的正則表達式。

(2)    大部分sed命令接收由逗號隔開的兩個地址,有一些命令值接受單個行地址。

還可以用大括號進行分組使其作用域同一個地址

2. 註釋: 註釋行的第一個字符一定是#號,可以用反斜槓結束前面的註釋可以繼續。若#後面的下一個字符是n,那麼腳本不會自動產生輸出。與命令行選項-n是等價的!

  3. 替換:

(1) 語法:

常見的替換標誌flags有:

n-------------表示對本模式中指定模式第n次出現的情況進行替換

g-------------對模式空間的所有出現的情況進行全局更改,若沒有g,通常只是第一次出現的情況被取代

p-------------打印模式空間的內容

w-------------將模式空間的內容寫得文件file中

(2) 解釋:

♥ 若沒有指定地址,那麼就應該應用於與pattern匹配的所有行,若地址被提供,而沒有指定模式,

那麼匹配由地址匹配的內容

♥ 地址需要一個斜槓作爲定界符,而正則表達式可以使用出換行符的任意字符來分隔,如!

♥ replacement是一個字符串,用來替換正則表達式中的內容,在replacement部分,只有下列字符具有特殊含義:

        &-----------------用正則表達式匹配的內容進行替換

        \n-----------------匹配第n個字串,這個字串之前在pattern中用\(和\)指定

        \--------------------轉義

      ♥ flag標誌可以進行組合,如gp表示進行全局替換後並打印出來

    ♥ 數字標誌的使用:

        sed 's/*/!/2' test-----------------將test文件中第二個出現的*替換爲!

   (3) 替換元字符:主要是值反斜槓、與符號和\n

         反斜槓一般用於轉義其他的元字符,但是它在替換字符串中也用於包含換行符。

           sed 's/*/\

          /2' test--------------------------表示將test文件中的第二個*替換成空,幷包含換行符

     

 on the UNIX Operation System---------------àon the \s-2UNIX\s0 Operation System

4. 刪除

(1) 刪除命令是一個可以改變腳本中的控制流的命令,一旦執行刪除命令,那麼這個“空的”模式空間就不能再進行其它的執行命令!

(2) 注意:刪除命令是以行爲單位的!而不僅是行中所匹配的部分。

5. 追加、插入和更改

(1) 追加:將文本放置在當前行之後

(2) 插入:將文本放置在模式空間的當前行之前

(3) 更改:更改命令用所提供的文本取代模式空間中的內容

【注意】這些命令的每一個都要求後面跟一個反斜槓用於轉義第一個行尾。text必須從下一行開始輸入。

(4) 追加命令和插入命令只應用於單個行地址,而不是一個範圍內的行,然而更改命令可以處理一個範圍內的行,這種情況下,它用一個文本備份取代所有被尋址的行。注意,所提供的文本卻僅僅只輸出一次!

6. 列表命令(l):可以用此命令來檢測輸入中的“不可見”字符,如行尾,一些非打印字符等。

[root@localhost sedawk2progs]# sed -n 'l'  test

abc$

gh$

js$

cdw$

其中$代表行尾。

7. 轉換(y)-------------------對應匹配,對應轉換

   語法:

它會將字符串abc中的每個字符,都轉換成字符串xyz中的等價字符,注意替換是按照字符的位置進行

的,因此,它沒有“詞”的概念

(完成大寫字母替換對應的小寫字母)

8. 打印(p): 用來輸出模式空間的內容,除非抑制默認的輸出(-n),否則它將輸出行的重複複製。

9. 打印行號:跟在地址後面的等號=打印被匹配的行的行號,除非抑制自動輸出否則行號和行均將被打印出來。語法爲:

10. 下一步命令(n):輸出模式空間中的內容,然後讀取輸出下一行,而不用返回到腳本的頂端。語法:

    next命令改變了正常的流控制,這正是它的主要目的。

11. 讀與寫文件命令(r,w): 命令可以直接處理文件。語法:

讀命令將由file指定的文件確定的行之後的內容讀入模式空間。它不能對一個範圍內的行進行操作

    寫命令是將模式空間的內容寫入文件中

12. 退出命令(q):會使sed停止讀取新的輸入行。語法:

 一旦找到和address匹配的行,腳本就結束。

    sed ‘100q’ test----------使用退出命令打印前100行

【注意】quit一個可能想到的用處是,從文件中提取出想要的內容之後自動退出腳本,但是,這一版不會

得逞,因爲quit命令使得只要找到和address匹配的行,它就會立馬退出!

 

 

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