sed是一種幾乎包括全部 UNIX平臺的輕量級編輯器。sed主要是用來將數據進行選取。替換。刪除。功能很強大。來看看介紹: 正則表達式
sed是逐行(行編輯器,記住,一行讀取一次,對行編輯。必定要記住這個概念!)讀取至內存,這個內存空間也叫模式空間,在模式空間中處理後將模式空間打印至屏幕。可是默認不對原文件處理。在模式空間中能夠進行進行模式匹配和編輯操做。模式空間中的內容可再次放入保持空間,進行編輯。express
須要注意的是sed命令中有沒有匹配到默認都會打印至屏幕,除非對其編輯。編輯後根據編輯命令也會打印到屏幕上,或者靜禁止輸出。 vim
vim只能修改文檔,sed能夠從管道里接受任何數據進行編輯。編輯器
sed [OPTION]... 'script' [input-file] ... [選項] '[編輯命令]' 文件名
ide
選項:
spa
-n 禁止默認顯示行爲,只保留編輯後的行爲,在不使用d命令的狀況下通常都要使用。不輸出模式空間中的內容至屏幕;
code
-e script, --expression=script:容許對輸出數據應用多條sed命令編輯。若是寫下一行用\分割下一行也-e,若是寫在一行上直接-e編輯。
regexp
-i 用sed的修改結果直接修改讀取數據的文件。而不是由屏幕輸出。(輸出數據和文件數據都改)
orm
-r --regexp-extended 表示使用擴展正則表達式。
ip
-f PATH/TO/SED_SCRIPT_FILE 經過讀取腳本,每行執行一個sed編輯命令,;
script: '/地址定界或PATTERN/編輯命令'
地址定界:
(1) 空地址:對全文進行處理;
(2) 單地址:
#:指定行;
/pattern/:被此模式所匹配到的每一行;
(3) 地址範圍
#,#:
#,+#:
#,/pat1/
/pat1/,/pat2/ //從第一次被匹配到的行開始第二次匹配到的行結束。
$:最後一行;
(4) 步進:~
1~2:全部奇數行; 2~2:全部偶數行;
編輯命令:
a \string 在文本後追加string。\n 可用於換行,實現多行追加;
c \string 行替換 ,把匹配到的行替換爲此處指定的string,換行每行後加「\n」;
i \string 在行前插入。一行或多行,除最後與一行,每行後加 \n;
d 刪除模式空間中內容。整行刪除。
p 打印,顯示模式空間中的內容,輸出指定行。
w /PATH/TO/SOMEFILE: 保存模式空間匹配到的行到指定文件。
r /PATH/TO/FILE 將指定的文件的內容內的添加至模式匹配的行後面,文件合併。
=:爲模式匹配到的行打印行號;
!:條件取反:地址定界!編輯命令;
s /pattern/string/字符串查找替換,分隔符不用要操做的分隔符,其餘符號看成分隔符也行,格式爲「幾行s/舊字符串/新字符串/g」
替換標記:
g:全局替換;
i: 忽略字符大小寫;
w:/PATH/TO/SOMEFILE:將替換成功的結果保存至指定文件中;
p: 顯示替換成功的行;
高級編輯命令:
h:把模式空間中的內容覆蓋至保持空間中;
H:把模式空間中的內容追加至保持空間中;
g:把保持空間中的內容覆蓋至模式空間中;
G:把保持空間中的內容追加至模式空間中;
x:把模式空間中的內容與保持空間中的內容互換;
n:覆蓋讀取匹配到的行的下一行至模式空間中;
N:追加讀取匹配到的行的下一行至模式空間中;
d :刪除模式空間中的行;
D:刪除多行模式空間中的全部行;
舉例:
sed '2a \hello' student.txt //在第二行以後追加hello sed '2i hello \ world' student.txt //在第二行以前插2行數據 hello(第一行) world(第二行) sed '4s/99/55/g’ student.txt //把4行的99換成55 sed '/oot/d' /etc/fstab //刪除oot在/etc/fstab sed '/^\//p' /etc/fstab 顯示/開始的行 sed '/^\//a \abc' /etc/fstab /開頭的行後追加abc sed '/oot/w /tmp/oot.txt' /etc/fstab 有oot的一行保存至/tmp/oot.txt目錄下,處理文件/etc/fatab sed 's#l\(..e\)#L\1#g' sed.txt 把l...e中的l換爲大寫。 sed -n 'n;p' /etc/fstab 顯示偶數行,; sed '1!G;h;$!d' FILE 逆序顯示文件內容 sed ‘!d’FILE 顯示最後一行 sed ‘$!N;$!d’FILE 最後兩行 sed ‘/^$/d;G’ 刪除原有的全部空白行,然後爲全部空白行後添加一個空白行; sed ‘n;d’FILE; 顯示奇數行,按行讀取的。 sed ‘G’FILE 在原有行後添加空白行; echo「/etc/fstab」|sed '@[^/]\+/\?$@@' 取出基名