SED(1)

名稱
sed - 文本篩選和格式轉換的流式編輯器

摘要
sed [選項]... {script-only-if-no-other-script} [輸入文件]...

描述
Sed是一個流式編輯器。流式編輯器是用來在輸入流（一個文件或者管道輸入）中 完成基本文本轉換的。當在一些允許腳本編輯的編輯器中（比如ed），sed通過將 輸入傳輸爲一個輸入來工作，這樣更高效。但是是sed的功能來過濾管道的文本並 從其他類型的編輯器中特別識別出這些文本。

-n, --quiet, --silent

    不自動打印模式空間的內容

-e 腳本, --expression=腳本

    添加腳本到將要執行的命令

-f 腳本文件, --file=腳本文件

    添加腳本文件的內容到即將執行的命令

--follow-symlinks

    處理已存在文件時跟隨鏈接

-i[SUFFIX], --in-place[=SUFFIX]

    編輯已存在的文件（如果提供了SUFFIX作爲後綴則做備份）

-l N, --line-length=N

    指定'l'命令需要的自動換行長度

--posix

    禁用所有GNU插件。

-E, -r, --regexp-extended

    在腳本中使用擴展正則表達式（爲了可移植性，請使用符合POSIX的-E）

-s, --separate

    將多個文件分別看待，而非統一視作同個連續的流。

--sandbox

    在沙箱模式下操作。

-u, --unbuffered

    從輸入文件中讀取最少量的數據並更頻繁地刷新輸出緩衝區

-z, --null-data

    用NUL字符分割行

--help
    顯示這個幫助並退出

--version
    輸出版本信息並退出

如果沒有給出-e，--expression，-f，或者--file選項， 那麼第一個非選項參數會被當作sed腳本解釋。所有餘下的參數是輸入文件的名稱； 如果沒有指定輸入文件，那麼就會讀取標準輸入。

GNU sed主頁：<http://www.gnu.org/software/sed/>。使用GNU軟件的通用幫助 ：<http://www.gnu.org/gethelp/>。Bug報告請發送電子郵件至：<bug-sed@gnu.org>。

命令摘要
這只是爲已經知道sed命令和相關文檔（例如texinfo文檔），需要翻閱命令完整 描述的人準備的sed命令的簡短摘要。

  零地址“命令”

: label
    b 和 t 命令的標籤。

#comment
    註釋將會延長到下一個新行 (或者一個 -e 腳本片段的結尾。）

}   一個{ }塊的閉括號。

  零或一地址命令

=   答應當前行的行號。

a \

text
    追加 text, text可以通過預先寫入反斜槓來嵌入新行。

i \

text
    插入 text, text可以通過預先寫入反斜槓來嵌入新行。

q [exit-code]
    立即退出sed腳本而不處理其他輸入，除非自動打印沒有禁用使得當前模式 空間將會被打印。[exit-code]是GNU插件（擴展）。

Q [exit-code]
    立即退出sed腳本而不處理其他輸入。這是一個GNU插件。

r 文件名
    從 文件名 讀取內容並追加到最後。

R 文件名
    從 文件名 讀取一行並追加到最後。每次調用這個命令就從文件中讀取一 行。這是一個GNU插件。

  接受範圍地址的命令

{   開始一個命令塊（以一個}結束）。

b label
    程序跳轉到label處;如果label被省略，跳轉到腳本尾部。

c \

text
    用 text 代替選擇的行, text 可以通過預先寫入反斜槓來嵌入新行。

d   刪除模式空間。 開始下一個循環。

D   如果模式空間包含新行，在d命令發佈之後開始一個新的普通循環。否則， 刪除模式空間中的text直到新行，並且在不讀入新行的情況下，用結果的 模式空間開始一個循環。

h H 複製/追加模式空間到保存空間。

g G 複製/追加保存空間到模式空間。

l   用“直觀明確”的格式列出當前行。

l width
    用“直觀明確”的格式列出當前行，在width字符處結束。這是一個GNU插件。

n N 讀取/追加下一行輸入到模式空間。

p   輸出當前的模式空間。

P   輸出直到遇到當前模式空間的第一個嵌入的換行符。

s/regexp/replacement/
    嘗試與模式空間匹配regexp，如果成功，用replacement代替匹配的部分 。replacement可能包含特殊字符&來引用模式空間中匹配的部分，而特殊 字符\1到\9則引用regexp中對應匹配的子表達式。

t label
    自上次輸入行讀取之後並且上次執行了t或者T命令之後，如果一個s///被 成功替換，那麼跳轉到label處;如果label被忽略，跳轉到腳本結尾。

T label
    自上此輸入行讀取之後並借上次執行了t或者T命令之後，如果一個s///被 成功替換，那麼跳轉到label處;如果label被忽略，跳轉到腳本結尾。這是 一個GNU插件。

w filename
    將當前的模式空間寫入到filename中。

W filename
    寫入當前模式空間的第一行到filename中。這是一個GNU插件。

x   交換模式空間和保存空間的內容。

y/source/dest/
    將模式空間中顯示爲source的字符用dest字符來寫出。

地址
Sed命令可以沒有指定地址，這樣將會爲所有行執行命令。如果給出了一個地址， 這樣命令就只會爲匹配此地址的行執行；如果給出了兩個地址，這樣命令將會對 從匹配的第一個地址到第二個地址的區域的所有輸入行執行命令。 關於地址範圍有三點：語法爲：addr1 , addr2（比如，地址要用逗號分開）； addr1匹配的行一定會被接受，即使addr2選定的是更靠前的行；並且如果addr2是 一個regexp（正則表達式），它將不會重複測試addr匹配的行。

在地址（或地址範圍）之後，在命令之前，可以插入一個!，這個符號定義的命令 只有在地址（地址範圍）不匹配的時候才能執行。

支持下面的地址類型：

number
    只匹配行號爲number的行。（除非-s選項在命令行中被指定，number值將 會按照文件數漸增。）

first~step
    匹配每一個第step行並從first開始計數。舉個栗子，``sed -n 1~2p''將 打印出輸入流所有奇數行，而地址2~5將匹配從第2行開始的，以5爲步長的 行。first可以是零；這樣，sed按其爲step來操作。（這是一個插件。）

$   匹配最近的行。

/regexp/
    匹配符合正則表達式regexp的行。

\cregexpc
    匹配符合正則表達式regexp的行。 其中c可以是任意字符。

GNUsed同樣支持某些特殊2地址格式：

0,addr2
    從“匹配了第一個地址”狀態始，直到發現addr2。這和1, addr2很相似， 除了當addr2匹配了輸入的第一行，0, addr2形式將在該範圍的結尾；而 1, addr2形式仍然在該範圍的開始。這種形式只有在addr2是正則表達式 的情況下才有效。

addr1,+N
    將會匹配 addr1 和在 addr1 之後的 N 行。

addr1,~N
    將會匹配 addr1 和 addr1 之後的輸入行數是 N 倍的下一行。

正則表達式
POSIX.2 BREs應該是支持的，但是由於性能的原因，這個特性還不完全。其中 \n序列匹配換行符，\a、\t和其他序列也是類似的。-E選項開關用來選擇是否使用擴展正則 表達式；-E選項已經由GNU sed支持了很多年，現已包含於POSIX中。

BUGS

請將錯誤報告發送至bug-sed@gnu.org。另外，請在郵件正文中儘量包含 ``sed --version''的信息。

作者
由 Jay Fenlason, Tom Lord, Ken Pizzini, 和 Paolo Bonzini寫成。 GNU sed 主頁: <http://www.gnu.org/software/sed/>. 使用 GNU 軟件的一般性手冊: <http://www.gnu.org/gethelp/>. E-mail bug 報告到: <bug-sed@gnu.org>.

版權
Copyright © 2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.

參見
awk(1), ed(1), grep(1), tr(1), perlre(1), sed.info, 任何和sed相關的書籍， sed常見問題(http://sed.sf.net/grabbag/tutorials/sedfaq.txt)， http://sed.sf.net/grabbag/。

sed 的完整文檔是作爲Texinfo手冊維護的。如果info和sed程序正確的安裝， 可以執行

    info sed

命令來訪問完整的手冊。

跋
本頁面中文版由中文 man 手冊頁計劃提供。

翻譯人員：Means Lee
翻譯日期：2017-05-15
原始軟件：sed
中文 man 手冊頁計劃：https://github.com/man-pages-zh/manpages-zh