set的定義:
sed是一種流編輯器,流編輯器會在編輯器處理數據之前基于預先提供的一組規則來編輯數據流。
sed編輯器可以根據命令來處理數據流中的數據,這些命令要么從命令行中輸入,要么存儲在一個命令文本文件中。
sed的執行過程:
讀取 ?目標文件 的每行數據依次加入到緩沖區(模式空間)里,默認從第一行開始讀取
執行 ?使用定義的增刪改查命令來處理讀取到緩沖區行數據
顯示 ?將處理后的行數據輸出到屏幕顯示
命令格式:
案例:打印cat.txt 文件的內容
1.sed -選項 ‘操作’ 文件名1 文件名2 ...
2.sed? ?-n? '{
}'? 文件名
選項:
-e :表示用指定命令來處理輸入的文本文件,只有一個操作命令時可省略,執行多個操作命令要多幾個e的使用
?-f :表示用指定的腳本文件來處理輸入的文本文件。
-h 或--help:顯示幫助。
-n? ?--quiet 或 silent:禁止sed編輯器輸出,但可以與p命令一起使用完成輸出。
-i:直接修改目標文本文件。
常用操作:
s:替換,替換指定字符。
d:刪除,刪除選定的行。
a:增加,在當前行下面增加一行指定內容。
i:插入,在選定行上面插入一行指定內容。
c:替換,將選定行替換為指定內容。
y:字符轉換,轉換前后的字符長度必須相同。
p:打印,如果同時指定行,表示打印指定行;如果不指定行,則表示打印所有內容;如果有非打印字符,則以 ASCII 碼輸出。其通常與“-n”選項一起使用。
=:打印行號。
l(小寫L):打印數據流中的文本和不可打印的ASCII字符(比如結束符$、制表符\t)
常用操作演示:
一.打印內容? ?? p(打印行內容) ?=(打印行號) ? l(打印ASCII字符)
sed -n -e '行號區間p' ? ? ? ? ? ? ? ? ? ? ? #根據行號或行區間進行打印? ? 打印第一行內容
sed -n -e '/字符串/p' ? ? ? ? ? ? ? ? ? ? ? #根據字符串匹配行進行打印? ? 打印包括字符串e的行內容
sed -n -r -e '/正則表達式/p' ? ? ? ? ?#根據正則表達式匹配行進行打印? ?要使用擴展元字符要使用-r
? ? 打印以o為開頭的行內容
sed -n -e '1~2p' ? ? ? ? ? ? ? ? ? ? ? ?#從第一行開始每隔2行查看? ? ?
案例: 打印顯示奇數行和偶數行
二.刪除刪除 ? ?d
sed -e '行號區間d' 文件名? ? ? ? 刪除第一行行內容
sed -e '/字符串/d? ? ? ? ? ? ? ? 刪除空行內容
?????????
注意一下下面的案例
??
sed -r -e '/正則表達式/d'? ? ? 擴展元字符需要用 r? ? ? 刪除以o為開頭的字符
三.替換 ? ?s(字符串替換) ? ?c(整行內容替換) ? ? y(對應字符替換)?
s:字符串替換
sed -e '行號區間 s/old/new/g' ? ? ? ? ? sed -n -e '行號區間 s/old/new/gp' ? ?#打印被修改的行
?修改/etc/yum.conf 文件第一行到第12行 開頭+#?
sed -e '行號區間 s/old/new/gw 保存文件' ? ? #保存被修改的行
sed -e '/字符串/ s/old/new/g'? ? ? ? ? g的位置可以指定數字 代表修改第幾個sed -r -e '/正則表達式/ s/old/new/g'? ? ?擴展元字符需要加 -r
sed -r -e 's/(xxx)(xxx)(xxx)/\3\2\1/'? ? ? ?擴展元字符需要加 -r
c:整行內容替換
sed -e '行號c 新行內容'
sed -e '/字符串/c 新行內容'
?
y: 對應字符替換
sed -e 'y/舊字符/新字符/' ? ? ?#注:新字符和舊字符的長度要一致
四.插入:
?a(在指定行下面插入行內容)
sed -e '行號區間a 行內容'
sed -r -e '/字符串或正則/a 行內容'
?i(在指定行上面插入行內容)
sed -e '行號區間i 行內容'
sed -r -e '/字符串或正則/i 行內容'
r(在指定行下面插入整個文件內容)
五.復制粘貼 ? H(復制指定行到剪切板) ? ?G(將剪切板內容粘貼到指定行下面)
sed -e '1,3H;$G' ? ? ? ? ? #將1-3行內容復制粘貼到最后一行下面
sed -e '1,3{H;d};$G' ? ? ? #將1-3行內容剪切粘貼到最后一行下面