sed
是一個非交互式文本編輯器,可對文本文件和標準輸入進行編輯;只對緩衝區總共原始文件的副本進行編輯,並不編輯原始的文件.
如果需要保存更改的內容需要重定向到另一個文件sed 'sed命令' fff > ggg
使用以下場合
大文件
編輯命令複雜,在交互式編輯器中難以輸入
對文件掃描一遍,但需要執行多個編輯參數
處理流程
讀入新的一行內容到緩存空間
從操作指令中去匹配第一條指令,判斷是否匹配模式.
如果不匹配,則忽略後續的編輯命令,回到第2步繼續去匹配下一條指令;
如果匹配則針對緩存的行執行編輯命令,完成後回到第2步繼續去匹配下一條指令;
所有指令都應用之後,輸出緩存行的內容;回到第1步繼續讀入下一行內容;
所有行處理完之後結束.
定義sed的三種方式:
sed 選項 '命令' 文件名
sed 選項 -f 腳本 文件名
./sed腳本文件 文件名
sed選項
-n 不打印所有行到標準輸出
-e 可使用多個sed編輯命令
-f 調用sed腳本文件
-r 啓用擴展正則表達式
-i 直接編輯
sed編輯命令
{} 在定位行執行命令組
p 打印匹配行
q 匹配一次即退出
= 打印行號
d 刪除匹配行
n 處理下一行
s 替換字符串
y 變換字符
r 從另一個文件中讀文本
w 保存到另一個文件中
i\ 定位行之前插入
a\ 定位行之後插入
c\ 修改匹配行
h 將模式緩衝區複製到保持緩衝區
H 保持緩衝區追加到模式緩衝區
x 互換模式和保持緩衝區
g 保持緩衝區複製到模式緩衝區
G 將模式緩衝區追加到保持緩衝區
文本定位
$ 最後一行
x x行
x,y x到y行
x,y! 不包含x到y行的行
/123/ 包含123的行
/123/,x 從與123匹配行到x行x,/123
從x行到與123匹配的行
下面給出一些命令示例:
r 從另一個文件中讀取文本
sed '/root/r 文件名'
w 將文寫入到一個文件
sed '/root/w 文件名'
s 替換字符串
sed 's/root/1234/g'
y 變換字符
sed 'y/abcd/ABCD/g'
c\修改文本
sed '/root/c\ffffffff'
n 處理匹配行的下一行
sed '/root/{n;s/bin/ooo/g;}' 文件名
行首加#
sed -i‘s/^/#/g' qqq
sed '/^$/d;G' 先用sed '/^$/d' 查找並刪除空行;然後用 sed G插入空行
sed 'G;G' 使一個文件中每一行都佔用三行空間(就是在每一行後邊插兩行空行)
sed '/regex/G' 查找後在後邊加入一空行
sed -n '$=' 統計行數
sed -n '2,+3p' 輸出第二行及其後3行
sed -n 'n;p' 輸出偶數行
sed -n 'p;n' 輸出奇數行
刪除每行開頭的所有空格
sed 's/^\s*//g'
刪除文件每行的第二個字符
sed -r 's/(.)(.)(.*)/\1\3/' a
sed 's/.//2' a
刪除文件每行的最後一個字符
sed -r 's/(.*)(.)/\1/' a
sed 's/.$//g' a
刪除文件每行的倒數第二個單詞。
sed -nr 's/(.*)([^a-Z]+)([a-Z]+)([^a-Z]+)([a-Z]+)([^a-Z]*)/\1\2\4\5\6/p'
刪除文件每行的最後一個單詞。
sed -nr 's/(.*)([^a-Z]+)([a-Z]+)([^a-Z]*)/\1\2\4/p'
大小寫轉換
sed中,使用\u表示大寫,\l表示小寫
1. 把每個單詞的第一個小寫字母變大寫:
sed 's/\b[a-z]/\u&/g' a \b是單詞邊界,也可以用\<替換\b
2. 把所有小寫變大寫:
sed 's/[a-z]/\u&/g' filename
3. 大寫變小寫:
sed 's/[A-Z]/\l&/g' filename