sed對文本的處理很強大,並且sed非常小,參數少,容易掌握,他的操作方式根awk有點像。sed按順序逐行讀取檔案。然後,它執行為該行指定的所有操作,並在完成請求的修改之後的內容顯示出來,也可以存放到檔案中。完成了一行上的所有操作之後,它讀取檔案的下一行,然後重複該過程直到它完成該檔案。在這裡要注意一點,源檔案(預設地)保持不被修改。sed 預設讀取整個檔案並對其中的每一行進行修改。說白了就是一行一行的操作。我用sed主要就是用裡面的替換功能,真的很強大。下面以執行個體,詳細的說一下,先從替換開始,最常用的。
sed -h -n, --quiet, --silent 取消自動列印模式空間 -e 指令碼, --expression=指令碼 添加“指令碼”到程式的運行列表 -f 指令檔, --file=指令檔 添加“指令檔”到程式的運行列表 --follow-symlinks 直接修改檔案時跟隨軟連結 -i[副檔名], --in-place[=副檔名] 直接修改檔案(如果指定副檔名就備份檔案) -l N, --line-length=N 指定“l”命令的換行期望長度 --posix 關閉所有 GNU 擴充 -r, --regexp-extended 在指令碼中使用擴充Regex -s, --separate 將輸入檔案視為各個獨立的檔案而不是一個長的連續輸入 -u, --unbuffered 從輸入檔案讀取最少的資料,更頻繁的重新整理輸出 --help 列印協助並退出 --version 輸出版本資訊並退出
[zhangy@BlackGhost mytest]# sed 's/root/tankzhang/' test |grep tank
說明:把test檔案中的root替換成tankzhang,只不過只替換一次及終止在這一行的操作,轉到下一行
[zhangy@BlackGhost mytest]# sed 's/root/tankzhang/g' test |grep zhang
說明: 用tankzhang把檔案test中的root全部替換掉,請注意g這個字母,global的縮寫
[zhangy@BlackGhost mytest]# sed -n 's/root/tankzhang/pg' test
加了-n pg後表示只列印那些發生替換的行(全部替換),上面的例子,我並沒有加上grep
[zhangy@BlackGhost mytest]# sed -n 's/root/tankzhang/p' test
加了-n p後表示只列印那些發生替換的行(部分替換),上面的例子,我並沒有加上grep
[zhangy@BlackGhost mytest]# cat test | sed -ne '2,8s/^zhang/ying/gp'
在第二行,到第八行之間,替換以zhang開頭的行,用ying來替換,並顯示替換的行
[zhangy@BlackGhost mytest]# cat test | sed -n '2,8s/^zhang/ying/gp;5,10s#dbus#goodbay#gp'
當有多個命令要執行時,可以用分號來分開,並且分隔字元可以自訂,預設是/。上面的例子意思是在第二行,到第八行之間,替換以zhang開頭的行,用ying來替換,在5,到10間,用goodbay來替換dbus,並顯示替換的行。
[zhangy@BlackGhost mytest]# cat test | sed -ne '2,8s/zhang/ying/gp' -ne '5,10s#dbus#goodbay#gp'
這個例子根上面的那個例子一樣,只不過有一點不同,那就是-e來充當了分號的作用,-e也能分割多個命令。