Linux基礎教程之文件三劍客sed命令用法詳解
sed是一種流編輯器,它是文本處理中非常強大的工具,能夠完美的配合正則表達式使用,用法簡單實用,非常靈活。
??????? 工作原理:sed命令處理文本時,把當前處理的行存儲在一個臨時緩沖區中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區中的內容,處理完成后,把緩沖區的內容送往屏幕。接著處理下一行,這樣不斷重復,直到文件末尾。
在sed高級編輯命令中,還會調用另一個臨時緩沖區,稱為“保持空間”(hold space),在模式空間中為處理完的行可以臨時存儲在保持空間中,在臨時空間接著處理下一行,然后在將保持空間中的行重新存儲在臨時空間中做后續處理,這樣就使得sed命令變的功能得更為強大。
sed命令不僅可以查看,篩選文本內容,還可以對一個或多個文本進行編輯,更改,簡化對文件的反復操作。
??????? sed中有自己的腳本命令,配合這些腳本文件,sed可以實現許多對文本的索引,編輯功能。
sed命令常用選項:sed [option] ‘script’ file
option:
-n :不輸出模式空間內容到屏幕,即不自動打印
-e :多點編輯
-f :/ PATH/SCRIPT_FILE : 從指定文件中讀取編輯腳本
-r :支持使用擴展正則表達式
-i : 修改源文件
-i.bak : 備份文件并原處編輯
-v : 打印版本和版權信息。
script:’地址+命令’
地址:
- )沒有地址:默認對全文進行處理。
- )單地址:
X:指定的行
/pattern/:被匹配到的每一行 - )地址范圍:
X1,X2 : 選取第 X1 行到 X2 行之間的行
X1,+X2 : 選取第 X1 行之后的 X2 個行
/pat1/,/pat2/ : 選取 pat1 第一次匹配到的行到 pat2 第一次匹配到的行之間的行
X,/pat1/ : 選取 X 第一次匹配到的行到 pat1 第一次匹配到的行 - )X1~X2 : 步進
1~2 : 從1開始,步進為2(奇數行)
2~2 : 從2開始,步進為2(偶數行)
命令:
d : 刪除模式空間匹配的行,并立即啟用下一輪循環
p : 打印當前模式空間內容,追加到默認輸出之后
a []text : 在指定行后面追加文本。支持使用n 實現多行追加
i []text : 在行前面插入文本
c []text : 替換行為單行或多行文本
w : 保存模式匹配的行至指定文件
r : 讀取指定文件的文本至模式空間中匹配到的行后
= : 為模式空間中的行打印行號
! : 模式空間中匹配行取反處理
s/X/X/g : 查找替換, 支持使用其它分隔符,s@@@ ,s###
y/XX/XX/ : 檢索所有匹配的項,替換為對應的字符
高級編輯命令:
P : 打印模式空間開端至n 內容,并追加到默認輸出之前
h : 把模式空間中的內容覆蓋至保持空間中
H : 把模式空間中的內容追加至保持空間中
g : 從保持空間取出數據覆蓋至模式空間
G : 從保持空間取出內容追加至模式空間
x : 把模式空間中的內容與保持空間中的內容進行互換
n : 讀取匹配到的行的下一行覆蓋至模式空間
N : 讀取匹配到的行的下一行追加至模式空間
d : 刪除模式空間中的行
D : 如果模式空間包含換行符,則刪除直到第一個換行符的模式空間中的文本
# : 把注釋擴展到下一個換行符以前。
案列
基本用法:
首先我們自己創建了一個方便查看效果的文件newf
基本篩選功能:
- 打印一到3行
- 查看文件帶有b的行到帶有a的行
- 打印奇數行
- 打印帶有字母a或帶有字母b的行
- 把所有b,c都換成a
如果不帶g 每行只會替換第一個(默認)匹配到的字符
g可以換成數字,表示替換匹配到的第幾個字符
可以將字符替換為 空 表示刪除 - 在第3行前一行插入字符
- 在第3行后插入字符
- 將每行第二個字符刪除
如圖所示,所有的空格被刪掉。-r選項支持擴展正則表達式(相當于sed ‘s/^(.)(.)/1/’)另一種方式sed ‘/.//2’ newfsed ” - 把所有abc替換為ABC
-y選項是把前面匹配的項全部對應替換為后面的字符
進階用法:
- 將1行放到3行后面
h:將模式空間的內容覆蓋保持空間中
G:將保持空間內容追加到模式空間中 - 在每行后面添加1個空行
保持空間默認有一個空白行 - 把1到4行放在5行后面
1h:覆蓋掉保持空間中的空白行
1,4d:刪除最前面的4行 - 將第1行替換到第3行
總結:通過一些簡單的例子,可以看出sed命令簡單,但是功能復雜多樣,需要通過大量的練習才能熟練掌握。sed命令在運用中十分重要,它可以批量搜索,顯示,修改文本內容,這是必須要學會,并熟練使用的工具。