SED流式編輯器
SED流式編輯器
1.SED的工作機制
sed處理文本文件時,首先會被讀到模式空間中,而不修改原文件。sed可以對文本文件的所有行進行操作,也可以通過正則表達式進行匹配,使得sed可以只處理模式空間中的被正則表達式匹配到的行。
然後再判斷模式空間中的文本是否會被正則表達式匹配到,如果匹配到,就會對匹配到的文本做編輯操作,之後再將被編輯的文本和沒有被編輯的文本一同輸出到標準輸出。
如果模式空間沒有被正則表達式匹配到,直接將沒有被匹配到的文本原樣輸出至標準輸出。
2.SED的用法
sed 【選項】 腳本 文件
3.常用的選項
-n:不輸出模式模式中的內容至屏幕,也就是不會將沒有匹配到的文本輸出到標準輸出,只是輸出編輯到文本
-e 腳本:可以指定多個腳本,實現多次編輯
-f 腳本文件:每一行一個編輯命令
-i:直接修改原文件
-r:表示使用擴展的正則表達式
4.地址定界
地址定界(與vim的末行模式類似)
(1)全文匹配:不需要給定地址,表示全文匹配,而vim需要給定%表示全文匹配
(2)單地址匹配:寫一個數字即可,例如:8表示匹配第8行
(3)多地址匹配:給定一個範圍,
例如:1,9 表示匹配第1行到第9行
例如:1,+2 表示匹配第一行到第三行
(4)模式匹配:
例如:/正則表達式/ 表示正則表達式匹配到的行
例如:1,/正則表達式/ 表示從第一行到正則表達式匹配到的行
(5)步長匹配
例如:1~2 表示所有奇數行
例如:2~2 表示所有偶數行
5.編輯命令
d:刪除
例如:cat 123
111
222
333
[[email protected] ~]# sed ‘1,2d‘ 123
333
[[email protected]
p:打印 //一定要-n選項,如果不加-n那麽打印的行將會顯示兩遍
[[email protected] ~]# sed -n ‘3,4p‘ /etc/fstab //打印/etc/fstab/的文件的三四行
a\字符串:在行後面加字符串,支持使用\n實現多行追加
例如:sed ‘5a\new_line‘ /etc/fstab:表示在第五行後面,也就是第六行插入new_line字符串,其後的行一次向下移動
w 文件路徑:將匹配到的行重定向至指定的文件中
例如:sed ‘/^[^#]/w yhy.txt‘ /etc/fstab 將非井號開頭的行保存至yes.txt文件中
r 文件路徑:讀取指定文件的內容插入到當前文件被匹配到的行處
例如: sed ‘3r /etc/issue‘ /etc/fstab 將/etc/issue中的內容插入到第3行的文本後面
=:表示被模式匹配到的行上面加上一個行號
sed ‘/^UUID/=‘ /etc/fstab
!:取反條件
例如:sed ‘/^#/!d‘ /etc/fstab 將不是以#好開頭的行刪除
s///:查找替換,常用的有s@@@, s### ,
修飾符有:
g:全局替換,表示可以替換一行中多次匹配到的字符串。如果不加g,那麽只能替換一行中第一次出現的字符串
w 文件路徑:替換成功的結果保存至指定文件中
p :顯示替換成功的行
SED流式編輯器