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