名稱
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
- 輸出版本資訊並退出
命令摘要
這只是為已經知道 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可以是任意字元。
- 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
請將錯誤報告發送至 [email protected]。另外,請在郵件正文中儘量包含 ``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 報告到: <[email protected]>.版權
Copyright © 2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.參見
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 Lee2017年2月 | sed 4.4 |