sed命令學習筆記

2021-04-22 13:41:51 字數 4115 閱讀 1079

rel="file-list" href="file:///c:%5cdocume%7e1%5cliaohr%5clocals%7e1%5ctemp%5cmsohtml1%5c10%5cclip_filelist.xml">sed

是源於行編輯器

ed的非互動式的流

(stream-oriented)

編輯器。

sed之所以稱為「流」編輯器,是因為象大多數

unix

程式一樣,輸入流過它,然後被導向標準輸出。

sed編輯器逐行處理檔案(或輸入),把當前處理的行儲存在稱為

「模式空間」(

pattern space

)的臨時緩衝區中,接著用

sed命令處理緩衝區中的內容,處理完成後,把緩衝區的內容送往螢幕。

sed處理完一行後將其從模式空間中刪除,然後讀入下一行進行處理和輸出。

sed是對檔案副本進行編輯和修改,所以不用擔心會修改或破壞原檔案。

sed主要用來自動編輯乙個或多個檔案

,簡化對檔案的反覆操作和編寫轉換程式等。

sed的使用格式如下:

sed[-n] [-e]『instruction』

file(s)

sed[-n] –f

scriptfile

file(s)

sed的instruction

格式如下:

[address

[,address

]][!]command

[arguments

]sed

的主要選項有:

-n

取消預設的輸出

-e 允許多行編輯 -f

指定sed指令碼檔名

-i[suffix]

修改原檔案,如果提供

suffix,作備份

-r

使用擴充套件正規表示式

sed0)命令應用於所有行;

1)命令令應用於任何符合這一位址的行

2)命令應用與從第1個位址到第2個位址之間的行

sed的命令主要有:

d

刪除行 p

列印行 !

對所選行之外的所有行應用命令 =

列印行號 s

替換命令(如

』s/^west/north/g』

注意查詢替換分隔符不必是』/』,而可以是換行符和反斜線外的任何字元(如

s#^west#north#gr

讀檔案 w

寫檔案 a/

在當前行後新增一行或多行 i/

在當前行之前插入文字 c/

用新文字代替當前行中的文字 l

顯示模式空間中的內容,顯示非列印字元為兩位元組

ascii碼

y 將一字元轉換為另一字元(如:

[address]y/abc/xyz/) n

讀入下一行,並將其讀入模式緩衝區中,任何命令都將應用於下一行 q

結束或退出

sed d

刪除多行

pattern space

中到/n為止

n 將下一行附加到上一行 p

列印到多行

pattern space的/n

為止 h(h)

hold

命令,附加(

h)或拷貝

(h)pattern space

的內容到

hold space

(暫存區)

g(g)

get命令,附加(拷貝

)暫存區的內容到

pattern space x

exchange

命令,互換

hold space

和pattern space

的內容 b

branch

(跳轉)命令(

[address]b[label])

t test(測試)

命令([address]t[label])

元字元

使

.

除換行(/n)之外的任何字元

*

匹配0或多個前導字元,相當於/ (如:/*love/)

+

匹配1或多個前導字元,相當於/注意這是擴充套件元字元

[...]

匹配指定字元組內的任一字元 (如:/[ll]ove/

/

匹配至少n個,至多m個前導字元;/ 將匹配正好 n個,

/將匹配至少n個 (如:/o/) ^

行首定位符

$

行尾定位符

/

取消轉義字元

/( /)

儲存已匹配的字元,最多可定義9個標籤(如:s//(love/)able//1er/)/n

獲取以上獲取的第n個標籤

&

儲存查詢串以便在替代串中引用 (如s/love/**&**/g)

/<

詞首定位符//

/>

詞尾定位符/love/>/

在命令列使用

sed時常常會涉及到和

shell

的互動,而使用

sed指令碼則完全不必要為此操心。不再用引號來確保

sed命令不被

shell

解釋,而且可用反斜槓來續行。另外,對於指令碼中的多個指令,應注意sed是對一行使用完了所有指令後再轉到下一行的。

sed的這種選擇使得它可以方便地處理大檔案(不必將整個檔案一次讀進記憶體)。另外,應注意sed對於指令碼中輸入的命令非常挑剔,在命令的末尾不能有任何空白或文字,如果在一行中有多個命令,要用分號分隔。開始的必須單起一行。這一點與awk的比較自由的使用方式形成對比。sed中使用多行指令的示例如下:

/^/.ts/,/^/.te/
sed如何使用

shell變數?比如在

shell

中定義了乙個

var變數,如何在

sed中呼叫此變數?可以考慮以下方法:

sed"s/mytext/$var/g" file

對於某些

mytext

這種方法可能不起作用。

sed 's/mytext/'$var'/g' file(1

)使用grep

時,正規表示式沒有包含在

//分隔符中,而

sed需要包含在

//之間; (

2)sed缺省會輸出每一行,所以需要用

-n命令阻止預設輸出; (

3)返回狀態。如果

grep

在檔案中找到指定模式,將返回狀態

0,否則返回1。

sed則

不管是否找到指定模式,它的退出狀態都是

0,只有命令存在語法錯誤時,

sed的

退出狀態才不是0。

sed為什麼要設計得如此「麻煩」呢?初用者在想只輸出匹配行時往往忘記加

-n選項。

這是因為

sed首先是乙個編輯器,而不是乙個查詢工具。比如當我們需要替換檔案的

一部分時可以用不加

-n選項的

sed 『s/a/b/g』 file實現。

qingley著.

李化等譯

. unix shell

範例精解.北京

:清華大學出版社

. 2007.5

dale dougherty & arnold robbins. sed & awk. second edition, march 1997.

Sed命令學習

該文章 jims of 肥肥世家 table of contents 1.sed簡介 2.定址 3.sed命令 4.選項 5.元字符集 6.例項 7.指令碼 8.小技巧 可以通過定址來定位你所希望編輯的行,該位址用數字構成,用逗號分隔的兩個行數表示以這兩行為起止的行的範圍 包括行數表示的那兩行 如1...

sed命令學習

與awk命令相似sed命令也用來批量處理文字,同樣是文字處理神器 基本命令形似 sed options command file s 比如hive的hdfs資料通常以日期分割槽,在hive指令碼中如果直接用from unix表示當天日期,會無法識別分割槽導致效率極其低下 通常可以在hive指令碼中先...

sed命令學習

緒 下文僅是本人學習sed時候的一些記錄,歡迎拍磚指正 sed基本編輯命令 建立批註 為換行符 集合有相同位址引數的指令。不執行函式引數 若匹配則不執行 注 n 不是最後一行,執行n命令 sed s replace g 注意使用技巧 列印匹配行的行號 line number 最多乙個位址引數 行數在...