sed
sed命令是一個(gè)面向字符流的非交互式編輯器,按行來處理文本內(nèi)容。在shell中,使用sed來批量修改文本內(nèi)容是非常方便的。
1、sed的工作原理
sed 把每一行都存在臨時(shí)緩存區(qū)中,對(duì)這個(gè)副本進(jìn)行編輯,所以不會(huì)修改或破壞源文件。具體過程如下:
1)sed 把當(dāng)前正在處理的行保存在一個(gè)臨時(shí)緩存區(qū)中,這個(gè)緩存區(qū)稱為“模式空間”或“臨時(shí)緩沖”。
2)sed 對(duì)模式空間中的行后處理完畢后,就把該行發(fā)送到屏幕上(除非之前有命令刪除這一行或取消打印操作)。
3)sed處理完輸入文件的最后一行后, sed 便結(jié)束運(yùn)行。
2、sed命令詳解
2.1、sed命令的語法格式
sed的命令格式
sed [option] 'sed command'filename
sed的腳本格式
sed [option] -f 'sed script'filename
2.2、sed命令的選項(xiàng)(option)
-n :使用安靜(silent)模式。在一般 sed 的用法中,所有來自 STDIN 的數(shù)據(jù)一般都會(huì)被列出到終端上。但如果加上 -n 參數(shù)后,則只有經(jīng)過sed 特殊處理的那一行(或者動(dòng)作)才會(huì)被列出來。
-e :多重編輯,且命令順序會(huì)影響結(jié)果
-f :直接將 sed 的動(dòng)作寫在一個(gè)文件內(nèi), -f filename 則可以運(yùn)行 filename 內(nèi)的 sed 動(dòng)作;
-r :sed 的動(dòng)作支持的是延伸型正規(guī)表示法的語法。(默認(rèn)是基礎(chǔ)正規(guī)表示法語法)
-i :直接修改讀取的文件內(nèi)容,而不是輸出到終端。
2.3、sed定位文本的方式
2.4、sed操作命令(command)
2.5、替換標(biāo)志
2.6、sed的正則表達(dá)式
2.7、字符集
2.8、sed實(shí)例
# {}的應(yīng)用
sed -n '1,4{=;p}' passwd
# a\的應(yīng)用
sed ‘/pattern/a new_str’file # 在匹配模式的下一行新,增str
sed ‘1a new_str‘ file # 在第1行后,新增str
# !的應(yīng)用
過濾#注釋行和空格行
sed –n ‘/#/!{/$/!p}’file
l /^#/!:打印除了#開頭的行
l {/^$/!p}:打印除了空格行
# -e 的應(yīng)用
刪除#注釋行和空行。有時(shí)-e的不同順序,會(huì)造成不同結(jié)果。比如 -e ’1a’–e ‘2a’
sed –e ‘/^#/d’-e ‘/^$/d’ file
將hello所在行的END替換為tail
sed –i ‘/hello/s@END@tail@#’
l @:地址定界符,還可以是/,#等其他特殊字符
# ()和&
將目錄下的.txt文件批量命名為.sh文件
find . –name ‘.txt’ | sed –re ‘s#(.).txt#mv & \1.sh#e’
l (.*).txt:查找的文件,對(duì)應(yīng)&
l (.*):分組,對(duì)應(yīng)\1,多個(gè)括號(hào)就依次對(duì)應(yīng)\2,\3,…
l e:執(zhí)行mv命令
# <>
刪除文件中含有you這個(gè)單詞的行。\必須加
sed ‘/<you>/d’file
3、參考文檔
linux sed命令詳解(推薦) (http://www.jb51.net/article/111306.htm)
linux命令總結(jié)sed命令詳解 (https://www.cnblogs.com/ginvip/p/6376049.html)