真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

sed4.4手冊

sed,流編輯器

目錄

  • 1簡介
  • 2運行sed
    • 2.1概述
    • 2.2命令行選項
    • 2.3退出狀態(tài)
  • 3sed腳本
    • 3.1 sed腳本概述
    • 3.2 sed命令摘要
    • 3.3 s命令
    • 3.4常用命令
    • 3.5較少使用的命令
    • 3.6 sed大師命令
    • 3.7特定于GNU的命令 sed
    • 3.8多種命令語法
      • 3.8.1需要換行符的命令
  • 4地址:選擇行
    • 4.1地址概述
    • 4.2按數(shù)字選擇行
    • 4.3通過文本匹配選擇行
    • 4.4范圍地址
  • 5正則表達式:選擇文本
    • 5.1正則表達式概述 sed
    • 5.2基本(BRE)和擴展(ERE)正則表達式
    • 5.3基本正則表達式語法概述
    • 5.4擴展正則表達式語法概述
    • 5.5字符類和括號表達式
    • 5.6正則表達式擴展
    • 5.7反向引用和子表達式
    • 5.8轉義序列 - 指定特殊字符
    • 5.9語言環(huán)境注意事項
  • 6高級sed:循環(huán)和緩沖區(qū)
    • 6.1 sed工作原理
    • 6.2保持和模式緩沖區(qū)
    • 6.3多線技術 - 使用D,G,H,N,P來處理多條線
    • 6.4分支和流量控制
      • 6.4.1分支和周期
      • 6.4.2分支示例:連線
  • 7一些示例腳本
    • 7.1連線
    • 7.2中心線
    • 7.3增加數(shù)字
    • 7.4將文件重命名為小寫
    • 7.5打印bash環(huán)境
    • 7.6線的反轉字符
    • 7.7跨多行的文本搜索
    • 7.8線長調整
    • 7.9文件的反向行
    • 7.10編號
    • 7.11編號非空行
    • 7.12計數(shù)字符
    • 7.13計數(shù)單詞
    • 7.14計數(shù)線
    • 7.15打印第一行
    • 7.16打印最后一行
    • 7.17使重復行獨特
    • 7.18打印輸入的重復行
    • 7.19刪除所有重復的行
    • 7.20擠壓空白線
  • 8 GNU sed的限制和不受限制
  • 9其他資源學習關于 sed
  • 10報告錯誤
  • 附錄A GNU自由文件許可證
  • 概念指數(shù)
  • 命令和選項索引

GNU sed

該文件記錄GNU 版本4.4 sed,一個流編輯器。

創(chuàng)新互聯(lián)服務項目包括龍里網站建設、龍里網站制作、龍里網頁制作以及龍里網絡營銷策劃等。多年來,我們專注于互聯(lián)網行業(yè),利用自身積累的技術優(yōu)勢、行業(yè)經驗、深度合作伙伴關系等,向廣大中小型企業(yè)、政府機構等提供互聯(lián)網行業(yè)的解決方案,龍里網站推廣取得了明顯的社會效益與經濟效益。目前,我們服務的客戶以成都為中心已經輻射到龍里省份的部分城市,未來相信會繼續(xù)擴大服務區(qū)域并繼續(xù)獲得客戶的支持與信任!

版權所有©1998-2017自由軟件基金會

授權根據(jù)GNU自由文件許可證1.3版或自由軟件基金會發(fā)布的任何更新版本的條款復制,分發(fā)和/或修改本文檔; 沒有不變的部分,沒有封面文本,也沒有封底文本。許可證的副本包含在題為“GNU自由文件許可證”的部分。


1簡介

sed是一個流編輯器。流編輯器用于對輸入流(文件或流水線的輸入)執(zhí)行基本文本轉換。雖然在某些方面類似于允許腳本編輯(例如ed) 的編輯器,sed只能通過輸入一次,但效率更高。但是,它有sed能力在管道中過濾文本,特別區(qū)別于其他類型的編輯器。



2運行sed

本章介紹如何運行sed。sed 腳本和單個sed命令的詳細信息將在下一章討論。


2.1概述

通常sed被這樣調用:

sed SCRIPT INPUTFILE ...

例如,要取代所有出現(xiàn)的“你好' 至 '世界'在文件中 input.txt中:

sed / s / hello / world /'input.txt> output.txt

如果不指定INPUTFILE,或者如果INPUTFILE是 - , sed過濾標準輸入的內容。以下命令是等效的:

sed / s / hello / world /'input.txt> output.txt sed's / hello / world /' output.txt cat input.txt |sed / s / hello / world /' - > output.txt 

sed將輸出寫入標準輸出。使用-一世在現(xiàn)場編輯文件而不是打印到標準輸出。又見W和s///w寫入輸出到其它文件的命令。以下命令修改file.txt的 并且不產生任何輸出:

sed -i / hello / world'file.txt

默認情況下sed打印所有已處理的輸入(除了通過命令修改/刪除的輸入d)。使用-n抑制輸出,以及p打印特定行的命令。以下命令僅打印輸入文件的第45行:

sed -n'45p'file.txt

sed將多個輸入文件視為一個長流。以下示例打印第一個文件的第一行(此時就把one.txt存盤)和最后一個文件的最后一行(three.txt)。使用-s 以扭轉這種行為。

sed -n'1p;$ p'one.txt two.txt three.txt

沒有 -e 要么 -F選項,sed使用第一個非選項參數(shù)作為腳本,以及以下非選項參數(shù)作為輸入文件。如果-e 要么 -F選項用于指定腳本,所有非選項參數(shù)均作為輸入文件。選項-e和 -F可以組合,并且可以出現(xiàn)多次(在這種情況下,最終的有效腳本將連接所有單個腳本)。

以下示例是等效的:

sed'/ hello / world /'input.txt> output.txt  sed -e's / hello / world /'input.txt> output.txtsed --expression ='s / hello / world /'input.txt > output.txt  echo's / hello / world /'> myscript.sed sed -f myscript.sed input.txt> output.txt sed --file = myscript.sed input.txt> output.txt 

2.2命令行選項

調用的完整格式sed是:

sed選項... [SCRIPT] [INPUTFILE ...]

sed 可以使用以下命令行選項調用:

--version

打印sed正在運行的版本和版權聲明,然后退出。

--help

打印使用消息,簡要總結這些命令行選項和錯誤報告地址,然后退出。

-n --quiet --silent

默認情況下,sed通過腳本在每個循環(huán)結束時打印出圖案空間(請參閱如何sed工作)。這些選項禁用此自動打印,并且sed僅在通過p命令明確告知時才產生輸出。

-e script --expression=script

將腳本中的命令添加到要處理輸入時要運行的命令集。

-f script-file --file=script-file

將文件腳本文件中包含的命令添加 到要處理輸入時要運行的命令集。

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

此選項指定要在現(xiàn)場編輯文件。 GNU sed通過創(chuàng)建臨時文件并將輸出發(fā)送到此文件而不是標準輸出。1。

這個選項意味著 -s。

當文件結束到達時,臨時文件將重命名為輸出文件的原始名稱。擴展名(如果提供)用于在重命名臨時文件之前修改舊文件的名稱,從而備份副本2)。


該規(guī)則遵循:如果擴展名不包含a *,則作為后綴添加到當前文件名的末尾; 如果擴展名包含一個或多個* 字符,則每個星號將替換為當前文件名。這允許您為備份文件添加前綴,而不是(或除了)后綴,甚至將原始文件的備份副本放置到另一個目錄中(如果目錄已存在)。

如果沒有提供擴展名,原始文件將被覆蓋而不進行備份。

-l N --line-length=N

指定命令的默認換行長度l。長度為零(零)意味著永遠不要纏繞長線。如果未指定,則取為70。

--posix

GNU sed包括POSIX sed的幾個擴展名。為了簡化寫入便攜式腳本,此選項將禁用此手冊所有文檔的擴展名,包括其他命令。 大多數(shù)擴展sed程序都接受POSIX所規(guī)定的語法之外的程序,但其中一些(例如Reporting Bugs中N描述的命令的行為)實際上違反了標準。如果要僅禁用后一種擴展名,則可以將該變量設置為非空值。 POSIXLY_CORRECT

-b --binary

此選項在每個平臺上可用,但僅在操作系統(tǒng)區(qū)分文本文件和二進制文件之間才有效。當進行這樣的區(qū)分時,如MS-DOS,Windows的情況,Cygwin文本文件由由回車符換行字符分隔的行組成 ,并且sed看不到結尾的CR。當指定此選項時,sed將以二進制模式打開輸入文件,因此不要求此特殊處理,并考慮以行結尾的行。

--follow-symlinks

此選項僅在支持符號鏈接的平臺上可用,并且僅在選項時才有效果 -一世 被指定。在這種情況下,如果在命令行中指定的文件是符號鏈接,sed則將跟隨鏈接并編輯鏈接的最終目的地。默認行為是中斷符號鏈接,以使鏈接目的地不被修改。

-E -r --regexp-extended

使用擴展正則表達式而不是基本正則表達式。擴展的正則表達式是那些 egrep接受的; 它們可以更清晰,因為它們通常具有較少的反斜杠。歷史上這是一個GNU擴展,但是-E 擴展已經被添加到POSIX標準(http://austingroupbugs.net/view.php?id=528),所以使用 -E為了便攜性。GNU sed已經接受了-E 作為多年來的無證選項,* BSD seds已經接受 -E 多年以來,但使用的腳本 -E可能不會移植到其他舊系統(tǒng)。見擴展正則表達式。

-s --separate

默認情況下,sed會將命令行上指定的文件視為單個連續(xù)的長流。該GNU sed 擴展允許用戶將它們視為單獨的文件:范圍地址(如“/ ABC /,/ DEF /')不允許跨越多個文件,行號相對于每個文件的開始,$指的是每個文件的最后一行,并且從R命令調用的文件在每個文件的開頭都被重繞。

--sandbox

在沙箱模式下, e/w/r命令被拒絕 - 包含它們的程序將被中止而不運行。沙箱模式確保sed 僅在命令行上指定的輸入文件上運行,并且無法運行外部程序。

-u --unbuffered

緩沖輸入和輸出盡可能最低限度。(如果輸入來自“尾巴',您希望盡快看到轉換后的輸出。)

-z --null-data --zero-terminated

將輸入視為一組行,每行以零字節(jié)(ASCII'NUL'字符)而不是換行符。此選項可用于命令,如'-z'和'find -print0'來處理任意的文件名。

如果不 -e, -F, - 表達, 要么 - 文件 選項在命令行中給出,則命令行上的第一個非選項參數(shù)被視為要執(zhí)行的腳本。

如果在處理上述內容后仍有任何命令行參數(shù),這些參數(shù)將被解釋為要處理的輸入文件的名稱。 文件名“ - '指標準輸入流。如果沒有指定文件名,將處理標準輸入。



2.3退出狀態(tài)

退出狀態(tài)為零表示成功,非零值表示失敗。GNU sed返回以下退出狀態(tài)錯誤值:

0

成功完成

1

無效的命令,無效的語法,無效的正則表達式或與之一起使用的 GNU sed擴展命令--posix。

2

在命令行上指定的一個或多個輸入文件無法打開(例如,如果找不到文件或拒絕讀取權限)。處理繼續(xù)與其他文件。

4

I / O錯誤或運行時嚴重的處理錯誤, GNU sed立即中止。

另外,該命令q和Q可用于終止 sed與自定義退出代碼值(這是一個GNU sed擴展名):

$ echo |sed'Q42';echo $? 42 


3個sed腳本


3.1 sed腳本概述

甲sed程序由一個或多個的sed命令,由一個或多個的傳遞 -e, -F, - 表達,和 - 文件 選項或第一個非選項參數(shù),如果使用這些選項的零。本文將參考“the” sed腳本; 這被理解為意味著傳入的所有腳本和腳本文件的順序連接。請參閱概述。

sed 命令遵循以下語法:

[addr]X [選項]

X是單字母sed命令。 [addr]是可選的行地址。如果[addr]指定,則命令X將僅在匹配的行上執(zhí)行。 [addr]可以是單行號,正則表達式或行范圍(請參見sed地址)。額外[options]的用于某些sed命令。

以下示例刪除輸入中的行30到35。 30,35是地址范圍。d是delete命令:

sed '30,35d'input.txt> output.txt

以下示例打印所有輸入,直到以“FOO'被發(fā)現(xiàn)。如果找到這樣的行, sed將以退出狀態(tài)42終止。如果沒有找到這樣的行(并且沒有其他錯誤發(fā)生),sed 將退出狀態(tài)0. /^foo/是一個正則表達式地址。 q是退出命令。42是命令選項。

sed'/ ^ foo / q42'input.txt> output.txt

一個內的命令腳本或腳本文件可以由分號(分離;)或換行符(ASCII 10)??梢灾付ǘ鄠€腳本-e 要么 -F 選項。

以下示例都是等效的。他們執(zhí)行兩個sed 操作:刪除與正則表達式匹配的任何行/^foo/,并替換字符串的所有出現(xiàn)“你好'與'世界“:

sed'/ ^ foo / d;s / hello / world /'input.txt> output.txt  sed -e'/ ^ foo / d'-e's / hello / world /'input.txt> output.txt  echo'/ ^ foo / d'> script.sed echo's / hello / world /'>> script.sed sed -f script.sed input.txt> output.txt  echo'/ hello / world /'> script2.sed sed -e'/ ^ foo / d'-f script2.sed input.txt> output.txt 

命令a,c,i,由于它們的語法,不能被隨后工作作為命令分隔符分號,因此應當用換行被終止或者被放置在的末端腳本或腳本文件。命令之前也可以帶有可選的非空白字符。請參閱多命令語法。



3.2 sed命令摘要

GNU 支持以下命令sed。一些是標準的POSIX命令,而另外一些是GNU擴展。每個命令的詳細信息和示例如下。(助記符)顯示在括號中。

a\ text

在一行后附加文本。

a text

在一行之后附加文本(替代語法)。

b label

無條件分配標簽。該標簽可以被省略,在這種情況下,在下一個周期開始。

c\ text

用文本替換(更改)行。

c text

用文本替換(更改)行(替代語法)。

d

刪除圖案空間; 馬上開始下一個循環(huán)。

D

如果模式空間包含換行符,則刪除直到第一個換行符的模式空間中的文本,并重新啟動循環(huán)與結果模式空間,而不會讀取新的輸入行。

如果模式空間不包含換行符,則會像d執(zhí)行命令一樣啟動正常的新循環(huán)。

e

執(zhí)行在模式空間中找到的命令,并使用輸出替換模式空間; 尾隨的換行被壓制。

e command

執(zhí)行命令并將其輸出發(fā)送到輸出流。該命令可以跨多行運行,除了最后一行之外,還有一個反斜杠。

F

(filename)打印當前輸入文件的文件名(帶尾隨的換行符)。

g

使用保持空間的內容替換圖案空間的內容。

G

在圖案空間的內容中附加換行符,然后將保留空間的內容附加到模式空間的內容。

h

(保持)用圖案空間的內容替換保持空間的內容。

H

在保留空間的內容中附加換行符,然后將模式空間的內容附加到保留空間的內容。

i\ text

在一行之前插入文字。

i text

在一行之前插入文本(替代語法)。

l

以明確的形式打印圖案空間。

n

(接下來)如果自動打印未被禁用,請打印圖案空間,然后,無論如何將圖案空間替換為下一行輸入。如果沒有更多的輸入,則sed退出而不處理任何命令。

N

向模式空間添加換行符,然后將下一行輸入追加到模式空間。如果沒有更多的輸入,則sed退出而不處理任何命令。

p

打印圖案空間。

P

打印圖案空間,直到第一個。

q[exit-code]

(退出)退出sed而不處理任何命令或輸入。

Q[exit-code]

(退出)此命令q與圖形空間的內容相同,但不會打印。像q它一樣,它提供了返回一個退出代碼給調用者的功能。

r filename

讀取文本文件一個文件。例:

R filename

在當前周期結束時或當讀取下一個輸入行時,將一行文件名排隊讀取并插入到輸出流中。

s/regexp/replacement/[flags]

(替換)將正則表達式與模式空間的內容進行匹配。如果找到了,更換匹配的字符串 替換。

t label

(測試)分支到標簽,只有當s自上一條輸入行被讀取或條件分支以來已成功 執(zhí)行時,才能進行標記。該標簽可以被省略,在這種情況下,在下一個周期開始。

T label

(測試)只有當自上次輸入行被讀取或條件分支以來沒有成功的 ubstitut 分支,才能進行標簽s。該標簽可以被省略,在這種情況下,在下一個周期開始。

v [version]

(版本)此命令不執(zhí)行任何操作,但sed如果 不支持GNU sed擴展,或者所請求的版本不可用,則會失敗。

w filename

將模式空間寫入文件名。

W filename

將給定的文件名寫入到第一個換行符的模式空間的部分

x

交換保留和模式空格的內容。

y/src/dst/

將與任何源字符匹配的模式空間中的任何字符與dest-chars中的相應字符進行音譯。

z

(zap)此命令清空模式空間的內容。

#

一個評論,直到下一個換行符。

{ cmd ; cmd ... }

組合幾個命令。

=

打印當前輸入行號(帶有尾隨的換行符)。

: label

指定的位置的標簽為分支命令(b, t,T)。


3.3 s命令

該s命令(如替代)可能是最重要的sed,有很多不同的選擇。該s命令的語法是's / regexp / replacement / flags”。

它的基本概念很簡單:該s命令嘗試將模式空間與提供的正則表達式regexp匹配; 如果匹配成功,則匹配的模式空間的那部分被替換替換。

有關regexp語法的詳細信息,請參閱正則表達式地址。

所述替換可以包含(?是一個從1到9,包括端點)的引用,這指的是包含在之間的匹配的所述部分?個 及其匹配。此外,替換可以包含 引用模式空間的整個匹配部分的未轉義字符。 \n\(\)&

該/ 字符可通過任何給定的內的任何其他單個字符被均勻地取代s命令。的/ 字符(或任何其他字符代替它使用)可以在出現(xiàn)正則表達式或替換 僅當它是由前面\的字符。

最后,作為一個GNU sed擴展,可以包括由一個反斜杠和一個字母的特殊序列 L,l,U,u,或E。其含義如下:

\L

將替換為小寫,直到找到\U或\E找到,

\l

將下一個字符轉成小寫,

\U

將替換成大寫,直到找到\L或\E找到,

\u

將下一個字符轉成大寫字母,

\E

停止案件轉換由\L或開始\U。

當g標志被使用時,情況轉換不會從正常表達式的一個出現(xiàn)傳播到另一個。例如,當執(zhí)行以下命令時,AB-'在圖案空間:

S / \(B \ \?) -  / X \ U \ 1 /克

輸出為'axxB”。當更換第一個' - ','\ü'序列只影響'\ 1”。它不影響x更換時被添加到模式空間字符b-用xB。

在另一方面,\l并且\u做影響了替換文本的其余部分,如果他們之后是一個空的替代。隨著'AB-'在模式空間中,以下命令:

S / \(B \ \?) -  / \ U \ 1X /克

將取代“ - '與'X'(大寫)和'B-'與'BX”。如果這種行為是不希望的,你可以通過添加一個“。\ E'序后'\ 1' 在這種情況下。

要包括文字\,&或在最終替換換行符,一定要早于期望的\,&或換行的置換用\。

該s命令可以后跟零個或多個以下標志:

g

將替換應用于所有匹配到正則表達式,而不僅僅是第一個。

number

只有更換數(shù)屆的匹配正則表達式。


s指揮 相互作用注意:POSIX標準沒有指定當您混合g和數(shù)字修飾符時應該發(fā)生什么,并且目前在sed實現(xiàn)中沒有廣泛同意的含義。對于GNU sed,交互定義為:在數(shù)字 th 之前忽略匹配,然后匹配并替換所有匹配的數(shù)字。

p

如果進行替換,則打印新的圖案空間。

注意:當指定了選項p和e選項時,兩者的相對排序產生非常不同的結果。一般來說,ep(評估然后打?。┦悄阆胍?,但另一方面操作可能對調試是有用的。因此,當前版本的GNU sed特別解釋p了前后選項的存在,e在評估之前和之后 打印模式空間,而一般來說,該s命令的標志只顯示一次。盡管如此,這種行為可能會在將來的版本中發(fā)生變化。

w filename

如果進行替換,則將結果寫入命名文件。作為GNU sed擴展,支持兩個特殊的文件名值:的/ dev /標準錯誤,將結果寫入標準錯誤,以及 的/ dev /標準輸出,寫入標準輸出。3

e

該命令允許從shell命令將輸入管道轉換為模式空間。如果進行替換,則執(zhí)行在模式空間中找到的命令,并將其空格替換為其輸出。尾隨的換行被壓制; 如果要執(zhí)行的命令包含NUL字符,則結果未定義。這是一個GNU sed擴展。

I i

I正則表達式匹配的修飾符是一個GNU 擴展,它使sed匹配正則表達式以不區(qū)分大小寫的方式。

M m

M正則表達式匹配的修飾符是GNU sed 擴展,它指示GNU sed在多行模式下匹配正則表達式。修飾符分別引起^和$匹配換行符之后的空字符串(除正常行為之外),換行符之前的空字符串。有一些特殊的字符序列(\`和\')始終與緩沖區(qū)的開頭或結尾相匹配。另外,在多行模式下,句點字符與新行字符不匹配。


3.4常用命令

如果你完全使用sed,你很可能想知道這些命令。

#



該#字符開頭的注釋; 評論將持續(xù)到下一個換行符。


如果您關心可移植性,請注意,某些實現(xiàn)sed(其不 符合POSIX的)可能僅支持單個單行注釋,然后僅在腳本的第一個字符為a時才支持#。


警告:如果sed腳本的前兩個字符是#n,那么-n(no-autoprint)選項被強制。如果您想在腳本的第一行發(fā)表評論,該評論以字母“?“你不想要這個行為,那么一定要用一個資本”?'或者在'?”。

q [exit-code]

退出sed而不處理任何命令或輸入。

示例:打印第二行后停止:

$ seq 3 |sed 2q 1 2 

此命令只接受一個地址。請注意,如果沒有禁用自動打印,則打印當前圖案空間-n選項。從sed腳本返回退出代碼的功能是GNU sed擴展。

另請參見GNU sed擴展Q命令,無需打印當前模式空間即可靜默退出。

d

刪除圖案空間; 馬上開始下一個循環(huán)。

示例:刪除第二個輸入行:

$ seq 3 |sed 2d 1 3 
p

打印圖案空間(到標準輸出)。此命令通常僅與該命令配合使用-n 命令行選項。

示例:僅打印第二個輸入行:

$ seq 3 |sed -n 2p 2 
n

如果未禁用自動打印,請打印圖案空間,然后,無論如何使用下一行輸入替換圖案空間。如果沒有更多的輸入,則sed退出而不處理任何命令。

該命令對于跳過線是有用的(例如,每第N行處理)。

示例:在每3行執(zhí)行替換(即兩個n命令跳過兩行):

$ seq 6 |sed'n; n; s /./ x /' 1 2 x 4 5 x 

GNU sed提供的擴展地址語法第一?步驟 ,以實現(xiàn)相同的結果:

$ seq 6 |sed'0?3s /./ x /' 1 2 x 4 5 x 
{ commands }

一組命令可之間被封閉 {和}字符。當您希望通過單個地址(或地址范圍)匹配來觸發(fā)一組命令時,這特別有用。

示例:執(zhí)行替換然后打印第二個輸入行:

$ seq 3 |sed -n'2 {s / 2 / X /;p}' X 

3.5較少使用的命令

雖然可能比上一節(jié)更少使用,但是sed可以使用這些命令構建一些非常小的但有用的腳本。

y/source-chars/dest-chars/

將與任何源字符匹配的模式空間中的任何字符與dest-chars中的相應字符進行音譯。

示例:音譯'AJ'進'0-9“:

$ echo你好世界| sed'y/ abcdefghij / 0123456789 /'74llo worl3 

(/任何給定y命令中的字符可以被任何其他單個字符均勻地替換。)

所述的實例/(或者任何其他字符代替它使用), \或換行符可以出現(xiàn)在源極-字符或DEST-字符 列表,提供每個實例由逃脫\。的源極-字符和DEST-字符列表必須 包含相同數(shù)量的字符(后脫逸出)。

有關tr類似的功能,請參閱GNU coreutils中的命令。

a text
網站名稱:sed4.4手冊
文章出自:http://weahome.cn/article/ieogoe.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部