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#g)r
讀檔案 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 最多乙個位址引數 行數在...