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) 地址范圍:
#,#
#,+#
/pat1/,/pat2/ 搜索從pat1開始到pat2結束的行進行編輯
取f2文件中以root開頭,以bash結束的行
#,/pat1/
取f2文件中第一行到,有wang的行。
(4) ~:步進
1~2 奇數行
2~2 偶數行
sed工具
編輯命令:
d: 刪除模式空間匹配的行
刪除模式空間中的第一行,但是只刪除了f2文件模式空間中的第一行,f2文件中的第一行并沒有刪除。
p: 顯示模式空間中的內容
先全部顯示模式空間中的內容,再把第一行再顯示一遍??梢约?span style="font-family:Calibri">-n過濾。
a \text:在行后面追加文本;支持使用\n實現多行追加
在行后添加文本
i \text:在行前面插入文本;支持使用\n實現多行插入
實現\n的多行插入
c \text:替換行為單行或多行文本
將f1模式空間中的內容替換為test。
w /path/to/somefile: 保存模式匹配的行至指定文件
將f1模式空間中的第一行轉存到/testdir/f22文件中。
r /path/from/somefile:讀取指定文件的文本至模式空間中匹配到的行后
將/testdir/f3中的China,打印到f1文件的行后。
上圖中,將f3中的China打印到f1中,只是在模式空間中做了修改,并沒有在源文件f1中作修改,要想在源文件中做修改用-i選項
若真想修改,可以先做個備份,用選項“.bak” 其中,bak這個后綴可以隨便起,下圖中的含義是在修改f1文件時,會先給f1文件作備份,產生一個f1.bak的新文件來存放f1原來的數據。之后才會將f3中的內容寫入f1中。
=: 為模式空間中的行打印行號
!:模式空間中匹配行取反處理
將除了含有wang的行打印行號。
sed工具
s///:查找替換,支持使用其它分隔符, s@@@, s###
查找出root,替換為ROOOT。
替換標記:
g: 行內全局替換
將f1文件中的所有小寫字母替換成A。
p: 顯示替換成功的行
w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中
將行首為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
替換example中test為mytest
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文件的模式空間中的dog為cat,hi為lo
sed –i.bak ‘s/dog/cat/g’ pets
編輯pets文件,全部將dog替換為cat,并備份
原創文章,作者:zzd,如若轉載,請注明出處:http://www.www58058.com/32096
對于sed一些常見的用法給處理分析與羅列,script包括兩部分:地址定界+編輯命令