sed
sed 是一種流編輯器,用來從輸入流中讀取內容并完成轉換,輸入流可以來自一個文件,也可以來自一個管道。
此命令的適用范圍:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1 、語法
sed [ 選項] file
2 、選項列表
選項 |
說明 |
--version |
顯示命令版本信息 |
--help |
顯示幫助文檔 |
-n | --quite | --slient |
靜默模式 |
-e | --expression=script |
給指令添加腳本 |
-f | --file=script-file |
將文件內容作為腳本,追加給指令 |
--follow-symlinks |
處理到位時遵循符號鏈接;硬鏈接仍將被破壞。 |
-i[SUFFIX] | --in-place[=SUFFIX] |
編輯文件到位(如果提供了擴展名,則進行備份)。默認的操作模式是中斷符號鏈接和硬鏈接。這可以通過跟隨符號鏈接和復制來改變。 |
-c | --copy |
當在-i模式下對文件進行洗牌時,請使用復制而不是重命名。雖然這將避免斷開鏈接(符號或硬鏈接),但結果的編輯操作并不是原子操作。這很少是想要的模式;-遵循符號鏈接通常就足夠了,而且它更快、更安全。 |
-l | --line-length=N |
指定每一行最大字符數,超過就自動換行 |
--posix |
禁用所有的GNU表達式 |
-r | --regexp-extended |
在腳本中使用擴展正則表達式。 |
-s |
將文件看作是分離的,而不是單獨連續的長字符串 |
-u | --unbuffered |
從輸入文件中加載最少數量的數據,并更頻繁地刷新輸出緩沖區。 |
如果沒有給出-e、--expression,、-f或-file選項,那么第一個非選項參數將作為sed腳本進行解釋。其余的參數都是輸入文件的名稱;如果沒有指定輸入文件,則讀取標準輸入。
命令 |
說明 |
沒有地址的命令 |
|
: label |
b 和t命令的標簽 |
#comment |
注釋將擴展到下一行(或-e腳本片段的末尾)。 |
} |
{} 塊的結束括號 |
沒有地址或者一個地址的命令 |
|
= |
打印當前的行號 |
a \ text |
追加文本,在換行符之前有一個嵌入的反斜杠 |
i \ text |
插入文本,在換行符之前有一個嵌入的反斜杠 |
q [exit-code] |
立即退出sed腳本,而不處理任何更多的輸入,除非自動打印沒有被禁用,當前的模式空間將被打印出來。退出代碼參數是一個GNU擴展。 |
Q [exit-code] |
立即退出sed腳本,而不處理任何更多的輸入。這是一個GNU擴展 |
r filename |
附加從文件中讀取的文本。 |
R filename |
附加從文件讀取的一行。命令的每次調用都從文件中讀取一行。 |
接受地址范圍的命令 |
|
{ |
開始一個命令塊(以)結尾) |
b label |
分支到標簽;如果省略標簽,則分支到腳本的末尾。 |
t label |
如果“s///”自讀取上一個輸入行以來以及從最后一個t或T命令開始已成功地進行了替換,則從“分支到標簽”;如果省略“標簽”,則將其分支到腳本的末尾。 |
T label |
如果自讀取上一個輸入行以來,以及自最后一個t或T命令以來,沒有“s///”已成功地進行了替換,則從“分支到標簽”;如果省略“標簽”,則從“分支到腳本的末尾”。這是一個GNU擴展。 |
c\ text |
用文本替換徐那種的行,在換行符之前有一個嵌入的反斜杠 |
d |
刪除模式空間。開始下一個周期。 |
D |
刪除模式空間中的第一個嵌入換行符。開始下一個周期,但如果模式空格中仍然有數據,則跳過從輸入中讀取。 |
h H |
復制/追加模式空間到保持空間 |
g G |
復制/追加保持空間到模式空間 |
x |
交換持有空格和模式空格的內容 |
l |
以“視覺清晰”的形式列出當前行。 |
l width |
以“視覺清晰”的形式列出當前行,在寬度width處將其拆分。這是一個GNU擴展。 |
n N |
在模式空間中讀取/追加下一行輸入 |
p |
打印到當前模式空間 |
P |
打印到當前模式空間的第一個嵌入換行符 |
s/regexp/replacement/ |
嘗試將regexp與模式空間匹配。如果成功,則將該部分替換為替換部分。替換可以包含特殊字符&引用匹配的模式空間的那一部分,特殊轉義\1到\9引用regexp中相應的匹配子表達式。 |
w filename |
將當前模式空間寫入文件名 |
W filename |
將當前模式空間的第一行寫入文件名。這是一個GNU擴展。 |
y/source/dest/ |
將在源中出現的模式空間中的字符音譯為dst中相應的字符。 |
3 、地址
SED 命令可以在沒有地址的情況下給出,在這種情況下,命令將對所有輸入行執行;使用一個地址,則只對與該地址匹配的輸入行執行該命令;或者使用兩個地址,在這種情況下,將對所有與從第一個地址開始并繼續到第二個地址的包含行范圍匹配的輸入行執行命令。關于地址范圍,需要注意三件事:語法是addr 1,addr 2(即地址用逗號分隔);addr 1匹配的行將始終被接受,即使addr 2選擇了前面的行;如果addr 2是regexp,則不會根據addr 1匹配的行對其進行測試。
在地址(或地址范圍)之后,在命令之前,可以插入一個“!”,這指定只有當地址(或地址范圍)不匹配時才執行命令。支持以下的地址類型“
number ,只匹配指定的行號。
first~step ,從指定的行first開始,每step行匹配一次。
$ ,匹配最后一行。
/regexp/ ,匹配正則表達式regexp的行。
\cregexpc ,匹配正則表達式regexp的行。c可以是任何字符
0,addr2 ,從“匹配的第一個地址”狀態開始,直到找到addr 2為止。這類似于1,addr 2,但如果addr 2匹配輸入的第一行0,addr 2表單將位于其范圍的末尾,而1,addr 2窗體仍將位于其范圍的開頭。這只在addr 2是正則表達式時才起作用。
addr1,+N ,將匹配addr 1和addr 1后面的N行。
addr1,~N ,將匹配addr 1和addr 1后面的行,直到輸入行號為N的倍數的下一行為止。
4 、實例
從一個文件讀取內容輸入到另一個文件
|
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。