sed是乙個非互動式文字編輯器,它可以對文字檔案和標準輸入進行編輯,標準輸入可以來自鍵盤輸入,檔案重定向,字串,變數,或者是管道的文字。並將其複製到緩衝區,然後讀取命令列的命令,對此命令要求的行號進行編輯。
用法:
sed共有三種用法:
①直接在命令列中使用
sed [選項] 'sed命令' 輸入檔案
②將sed命令寫入指令碼檔案中,使用sed命令呼叫
sed [選項] -f sed指令碼檔案 輸入檔案
③將sed命令寫入指令碼檔案中,並設定為可執行
./sed 指令碼檔案 輸入檔案
其中第③種的指令碼檔案中需要使用#!符號開頭。
sed常用的選項
-n:不列印所有的行到標準輸出,只輸出那些被命令影響到的行
-r:表示支援延伸型的正則表示法(預設只支援基礎正則表示法)
-i:直接修改讀取的檔案內容,而不是通過螢幕輸出。
sed命令
sed命令通常由兩部分組成。文字定位和sed編輯命令。
文字定位對文字的部分行進行抽取,編輯命令對抽取的行進行編輯。
sed定位方式
sed提供了兩種定位方式:
①通過行號,指定一行或者行號範圍
②使用正規表示式
定位方式:
x:x為指定行號
x,y:指定從x到y的行號範圍
/pattern/:查詢包含模式的行
/pattern/pattern/:查詢包含兩個模式的行
x,/pattern/:從x行到patter模式匹配的行之間
x,y!:查詢不包括x和y行號的行
sed編輯命令
p:列印匹配行
=:列印檔案行號
a:在定位行號之後追加文字資訊
i:在定位行號之前插入文字資訊
d:刪除定位行
c:使用新文字替換文字行
s:使用替換模式替換相應模式
r:從另乙個檔案中讀取文字
w:將文字寫入到乙個檔案
y:變換字元
q:第乙個模式匹配後退出
{}:在定位行執行命令組
說了這麼多,我們就先來體驗一下:
[fuwh@localhost 15:11 ~/stu
]$ nl test
1first line
2second line
3l i n e
4what is this
[fuwh@localhost 15:11 ~/stu
]$ sed '2d' test
first line
l i n e
what is this
這就是sed的乙個基本使用方式。
sed '2d' test:2表示定位到第二行,d表示刪除,test表示輸入檔案。
選項-n的用法
[fuwh@localhost 16:22 ~/stu
]$ cat test
first line
second line
l i n e
what is this
[fuwh@localhost 16:22 ~/stu
]$ sed -n '2,4p' test
second line
l i n e
what is this
[fuwh@localhost 16:22 ~/stu
]$
除了使用-e選項外,還可以使用{}和;來實現相同的功能
[fuwh@localhost 17:04 ~/stu
]$ cat test | sed -n '3,$'
sed:-e 表示式 #1,字元 3:遺漏命令
-bash: p}: command not found
[fuwh@localhost 17:04 ~/stu
]$ cat test | sed -n '3,$'
[fuwh@localhost 17:05 ~/stu
]$ cat test | sed -n '3,$'
l i n e
3what is this4[
fuwh@localhost 17:05 ~/stu
]$
選項-e的用法
[fuwh@localhost 16:26 ~/stu
]$ cat test | sed -ne '2,/is/p' -e '2,/is/='
second line
2l i n e
3what is this4[
fuwh@localhost 16:27 ~/stu
]$
選項-f的用法
首先建立乙個sed的指令碼檔案,內容如下,並賦予可執行的許可權。
[fuwh@localhost 16:45 ~/stu
]#!/bin/sed -f
/this/a\
[fuwh@localhost 16:45 ~/stu
]$ cat test
first line
second line
l i n e
what is this
[fuwh@localhost 16:47 ~/stu
]$ which sed
/bin/sed
[fuwh@localhost 16:47 ~/stu
]$ ll
-rw-rw-r--. 1 fuwh fuwh 44 8月 11 15:10test
[fuwh@localhost 16:47 ~/stu][
fuwh@localhost 16:48 ~/stu
]$ ll
-rw-rw-r--. 1 fuwh fuwh 44 8月 11 15:10test
[fuwh@localhost 16:52 ~/stu
]first line
second line
l i n e
what is this
[fuwh@localhost 16:53 ~/stu
]$
替換命令s
替換命令,將匹配的文字替換成新的文字。命令格式如下:
s/被替換的字串/新字串/[替換選項]
替換選項和意思:
g:表示替換文字中所有出現的
p:與-n結合,只列印替換行
w 檔名:表示將輸出重定向到乙個檔案
[fuwh@localhost 17:33 ~/stu
]$ sed 's/line/row/g' test
first row
second row
l i n e
what is this
[fuwh@localhost 17:35 ~/stu
]$
Linux之Sed命令詳解
3.sed命令 呼叫sed命令有兩種形式 sed options command file s sed options f scriptfile file s a 在當前行後面加入一行文字。b lable 分支到指令碼中帶有標記的地方,如果分支不存在則分支到指令碼的末尾。c 用新的文字改變本行的文字...
linux之sed命令詳解
sed是stream editor的簡稱,也就是流編輯器。它一次處理一行內容,處理時,把當前處理的行儲存在臨時緩衝區中,稱為 模式空間 pattern space 接著用sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。接著處理下一行,這樣不斷重複,直到檔案末尾。檔案內容並沒有 改變...
linux命令之sed命令詳解
1.sed簡介 2.定址 可以通過定址來定位你所希望編輯的行,該位址用數字構成,用逗號分隔的兩個行數表示以這兩行為起止的行的範圍 包括行數表示的那兩行 如1,3表示1,2,3行,美元符號 表示最後一行。範圍可以通過資料,正規表示式或者二者結合的方式確定 3.sed命令與選項 呼叫sed命令有兩種形式...