sed? Stream EDitor 行編輯器
sed 是一種流編輯器,它一次處理一行內容,處理時把當前處理的行存儲在臨時緩沖區中,稱為“模式空間”(pattern space)接著用sed 命令處理緩沖區的內容,處理完成后把緩沖區的內容送往屏幕,然后讀入下一行,執行下一個循環,但不會清空保留空間,這樣不斷重復,知道文件末尾,文件內容并沒有改變,除非你使用重定向存儲輸出
功能:主要用來自動編輯一個或多個文件,簡化對文件復雜的操作,編寫轉換程序等
sed工具的用法 sed 【option】 ….? ‘script’? inputfile ………
[option] 選項? -n : 不輸出模式空間內容到屏幕上,即不自動打印
-e : 多點編輯
-f : /PATH/SCRIPT_FILE : 從指定文件中讀取編輯腳本
-r : 支持使用擴展正則表達式
-i.bak : 備份文件并原文編輯
‘script’? ? ? ?‘地址命令’
1 不給地址,對全文進行處理
2 單地址: # : 指定行數? ? ? ? $ :最后一行
/pattern/ : 別此處模式所能匹配到的每一行
3 地址范圍: # , #? ? ? ? ? ?# , +#? ? ? ? ? /pat1/ , /pat2/? ? ? ? ?# , /pat1/
4 ~? ? ? ? :? ?進步? ? 1~2? 奇數行? ?2~2? 偶數行
例如:
創建一個文件 f1 里面包含 1-10數字? 用命令sed來做實驗
sed? ‘4p’? f1
只打印第4行 用 -n
sed? -n? ‘4p’ f1
打印偶數行? 用 ‘2~2p’? 打印偶數? ? 用’1~2p’打印奇數
sed -n? ‘2~2p’? f1
-e 多點打印
p: 打印模式空間內容,追加到默認輸出之后
sed? ?-ne ‘2p’ -e ‘4p’ f1
-i.bak 備份 并對原文件編輯? ? sed? -i.bak ‘/aliaseas/aalias p=poweroff’? .bashrc
-f 從文件中讀取編輯腳本
sed -nf? sedscript.txt f1
sed 工具的編輯命令
d : 刪除模式空間的匹配行,并立即啟用下一輪循環
!:模式空間中匹配行取反處理
=: 為模式空間中的行打印行號? 顯示在/etc/passwd 文件中含有root 的行號
a [\]text:在指定行后面追加文本? ??支持使用\n實現多行追加
i [\]text:在行前面插入文本
c [\]text:替換行為單行或多行文本
w 文件: 保存模式匹配的行至指定文件
r /path/somefile:讀取指定文件的文本至模式空間中??匹配到的行后
s///:查找替換,支持使用其它分隔符,s@@@,s###
在/etc/default/grub? ? 給GRUB_CMDLINE_LINUX=”crashkernel=auto rhgb quiet” 后面加個字符串xyz
高級編輯命令
P : 打印模式空間開端至 \n 內容,并追加到默認輸出之前
h :把模式空間中的內容覆蓋至保持空間中
H :把模式空間中的內容追加至保持空間中
g :從保持空間取出數據覆蓋至模式空間
G :從保持空間取出數據追加至模式空間
x :? 把模式空間內容與保持空間內容互換
n :讀取匹配到的行的下一行覆蓋至模式空間
N :讀取匹配到的行的下一行追加至模式空間
d :刪除模式空間中的行
D :如果模式空間包含換行符,則刪除直至第一個換行符的模式空間中,并不會讀取新的輸入行,而使用? ? ? ? ? ? 合成的模式空間重新啟動循環,如果模式空間不包含換行符,則會像發出 d 命令那樣啟動正常的循環
只保留奇數行
倒序顯示
只留最后一行
只保留最后2行
將文本文件的n和n+1行合并為一行,n為奇數行
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/97375