sed命令學習筆記 1.sed簡介sed是非互動編輯器。它不會修改檔案,除非使用shell重新導向來儲存結果。預設情況下,所有的輸出行都被列印到螢幕上。sed編輯器逐行處理檔案(或輸入),並將結果發送到螢幕。具體過程如下:首先sed把當前正在處理的行儲存在一個臨時緩衝區中(也稱為模式空 間),然後處理臨時緩衝區中的行,完成後把該行發送到螢幕上。sed每處理完一行就將其從臨時緩衝區刪除,然後將下一行讀入,進行處理和顯示。處理完輸入 檔案的最後一行後,sed便結束運行。sed把每一行都存在臨時緩衝區中,對這個副本進行編輯,所以不會修改原檔案 2.定址定址用於決定對哪些行進行編輯。地址的形式可以是數字、Regex、或二者的結合。 如果地址是數字這表示行號,如果是“$"則表示最後一行,例如: 01#列印第三行02sed -n '3p' example03 04#查看檔案的10到30行05sed -n '10,30p' example06 07#從第10行查看到末尾08sed -n '10,$' example09 10#列印從包含“first”的行 到包含“python”的行11sed -n '/first/,/python/p' example12 13#刪除包含“linux”的行到第10行14sed ‘/linux/,10d’ example 15 16#刪除example檔案所有包含test的行 17sed '/test/'d example 3命令與選項 sed命令告訴sed如何處理由地址指定的各輸入行,如果沒有指定地址則處理所有的輸入行。 3.1 sed命令 命令 功能 a\ 在當前行後添加一行或多行。多行時除最後一行外,每行末尾需用“\”續行 c\ 用此符號後的新文本替換當前行中的文本。多行時除最後一行外,每行末尾需用"\"續行 i\ 在當前行之前插入文本。多行時除最後一行外,每行末尾需用"\"續行 d 刪除行 h 把模式空間裡的內容複寫到暫存緩衝區 H 把模式空間裡的內容追加到暫存緩衝區 g 把暫存緩衝區裡的內容複寫到模式空間,覆蓋原有的內容 G 把暫存緩衝區的內容追加到模式空間裡,追加在原有內容的後面 l 列出非列印字元 p 列印行 n 讀入下一輸入行,並從下一條命令而不是第一條命令開始對其的處理 q 結束或退出sed r 從檔案中讀取輸入行 ! 對所選行以外的所有行應用程式命令 s 用一個字串替換另一個 g 在行內進行全域替換 w 將所選的行寫入檔案 x 交換暫存緩衝區與模式空間的內容 y 將字元替換為另一字元(不能對Regex使用y命令) 3.2 sed選項 選項 功能 -e 進行多項編輯,即對輸入行應用多條sed命令時使用 -n 取消預設的輸出 -f 指定sed指令碼的檔案名稱 4範例 01#將檔案tt中的a替換成mytest02sed 's/a/mytest/g' tt03 04#將檔案tt中的a替換為you05sed 's/a/you/g' tt06#如果沒有g標記,則只有每行第一個匹配的test被替換成mytest。 07 08#只替換前兩行09sed '1,2s/a/you/g' tt10 11#選項-e用於進行多重編輯。12sed -e '1,10d' -e 's/My/Your/g' tt13#第一重編輯刪除第1-10行。第二重編輯將出現的所有My替換為Your。14#因為是逐行進行這兩項編輯(即這兩個命令都在模式空間的當前行上執行),所以編輯命令的順序會影響結果。15 16#讀命令,使用該命令將特定的檔案內容添加到另一檔案特定的行後17sed '/a/r tt1' tt18#如果讀到的tt檔案中的行有a,則將tt1檔案中的內容添加到匹配行的後面19 20#將讀到的內容添加到tt1檔案中21sed '/a/w tt1' tt22 23#讀取tt檔案,將包含“a”的下一行中的“v”替換成mytest24sed '/a/{n;s/v/mytest/;}' tt25 26#讀到檔案tt中的行包含a,則在其後面加上“you”27sed 's/a/&you/g' tt 28 29 30sed '1,20y/hrwang12/HRWANG^$/'31#將1到20行內,所有的小寫hrwang轉換成大寫,將1轉換成^,將2轉換成$。32#Regex元字元對y命令不起作用。斜線可以被替換成其它的字元。