溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Linux基礎(chǔ)命令---文本編輯sed

發(fā)布時(shí)間:2020-08-10 23:40:08 來源:ITPUB博客 閱讀:115 作者:一生有你llx 欄目:建站服務(wù)器

sed

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模式下對文件進(jìn)行洗牌時(shí),請使用復(fù)制而不是重命名。雖然這將避免斷開鏈接(符號(hào)或硬鏈接),但結(jié)果的編輯操作并不是原子操作。這很少是想要的模式;-遵循符號(hào)鏈接通常就足夠了,而且它更快、更安全。

-l | --line-length=N

指定每一行最大字符數(shù),超過就自動(dòng)換行

--posix

禁用所有的GNU表達(dá)式

-r | --regexp-extended

在腳本中使用擴(kuò)展正則表達(dá)式。

-s

將文件看作是分離的,而不是單獨(dú)連續(xù)的長字符串

-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 命令可以在沒有地址的情況下給出,在這種情況下,命令將對所有輸入行執(zhí)行;使用一個(gè)地址,則只對與該地址匹配的輸入行執(zhí)行該命令;或者使用兩個(gè)地址,在這種情況下,將對所有與從第一個(gè)地址開始并繼續(xù)到第二個(gè)地址的包含行范圍匹配的輸入行執(zhí)行命令。關(guān)于地址范圍,需要注意三件事:語法是addr 1,addr 2(即地址用逗號(hào)分隔);addr 1匹配的行將始終被接受,即使addr 2選擇了前面的行;如果addr 2是regexp,則不會(huì)根據(jù)addr 1匹配的行對其進(jìn)行測試。

在地址(或地址范圍)之后,在命令之前,可以插入一個(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è)文件

[root@192 weijie]#  cat 1.c                      // 查看文件內(nèi)容

hello world, 

i am david. 

i love linux, 

love code.

nihao ed

[root@192 weijie]#  sed r 1.c >> 2.c           // 1.c 讀取,寫入到 2.c

[root@192 weijie]#  cat 2.c                      // 查看內(nèi)容

123

23

212

hello world, 

i am david. 

i love linux, 

love code.

nihao ed

 


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI