sed: Stream Editor文本編輯器,面向字符流, 一次處理一行內(nèi)容,處理時,將當(dāng)前處理行存儲再臨時緩存區(qū)中,稱為"模式空間"(pattern space), 接著用sed命令處理緩存區(qū)的內(nèi)容,處理完成后,將緩存區(qū)的內(nèi)容送到屏幕,接著處理下一行,不斷重復(fù)直到結(jié)尾。
sed命令格式:
sed [option] 'sed command' filenamesed腳本格式:
sed [option] -f 'sed script' filenamesed命令選項
-n:只打印模式匹配的行(不然會全打出來)必須跟p
-e: 直接在命令行模式上進(jìn)行sed動作編輯(默認(rèn))
-f: 執(zhí)行script腳本
-r: 支持?jǐn)U展表達(dá)式
-i: 直接修改原文件內(nèi)容-
sed定址
- 行號:數(shù)字或者范圍
| model | summary |
|---|---|
| x | x為行號 |
| x,y | 表示行號從x到y(tǒng) |
| /pattern | 查詢包含模式的行 |
| /pattern /pattern | 查詢包含兩個模式的行 |
| pattern/,x | 在給定行號上查詢包含模式的行 |
| x,/pattern/ | 通過行號和模式查詢匹配的行 |
| x,y! | 查詢不包含指定行號x和y的行 ! 表示反選 |
- sed的編輯命令(sed command)
| model | summary |
|---|---|
| p | 打印匹配行(和 -n 命令一個合用, 不然默認(rèn)-e,緩存區(qū)的內(nèi)容會重復(fù)輸出) |
| = | 顯示文件行號 |
| a\ | 在定位行號后附加新文本信息 |
| i\ | 在定位行號后插入新文本信息 |
| d | 刪除定位行(只是打印輸出刪除了,原文件沒變) |
| c|用新文本替換定位文本 | |
| w filename | 寫文本到一個文件,類似輸出重定向 > |
| r filename | 從另一個文件中讀文本,類似輸入重定向 < |
| s | 使用替換模式替換相應(yīng)模式 |
| q | 第一個模式匹配完成后退出或立即退出 |
| l | 顯示與八進(jìn)制ACSII代碼等價的控制符 |
| n | 從另一個文件中讀文本下一行,并從下一條命令而不是第一條命令開始對其的處理(啥意思??) |
| N | 在數(shù)據(jù)流中添加下一行以創(chuàng)建用于處理的多行組 |
| g | 將模式2粘貼到/pattern n/ |
| y | 傳送字符,替換單個字符 |
——————————————————————————
PS:
linux文件輸入輸出重定向
輸出重定向:
echo line > file
echo line >> file # 追加不覆蓋
重定向輸入:
wc -l < file # 統(tǒng)計文件file的行數(shù)
—————————————————————————
栗子:
sed -n '/client_timeout/p' conf # 打印包含client_timeout的行
sed -n '/client_timeout/,/hahaha/p' conf # 兩個pattern, 滿足其一就打印
sed -n '2, /client_timeout/p' conf # 從第2行到出現(xiàn)client_timeout的那行打印
sed -n '-e /=/p' '-e =' test # 打印包含=的行, 且打印行號
修改配置文件conf的client_timeout值:
sed -i '-e s/\(client_timeout : \).*/\1100/' '-e s/\r//g' "/home/conf"