linux之sed命令詳解

2022-05-18 10:18:24 字數 3537 閱讀 1311

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命令有兩種形式...