{eval=Array;=+count(Array);}
謝謝邀請(qǐng),我來(lái)回答一下這個(gè)shell命令!
sed命令既可以直接輸入到控制臺(tái)中執(zhí)行,也可以放在腳本文件中執(zhí)行
sed對(duì)于傳入的數(shù)據(jù)流會(huì)逐行的讀取
對(duì)于每行中匹配到的數(shù)據(jù)才會(huì)使用命令進(jìn)行修改
它并不會(huì)修改原始的數(shù)據(jù)
生成的新數(shù)據(jù)會(huì)輸出到stdout,一般是控制臺(tái),也可以輸出到文件
(1)使用管道命令輸入數(shù)據(jù)
(2)替換文件中的數(shù)據(jù)
1.log
是我們的數(shù)據(jù)文件我們直接處理
1.log
這個(gè)文件的數(shù)據(jù),并且這次我們使用兩個(gè)匹配命令(用分號(hào)隔開就行,前面加了一個(gè)-e,其實(shí)不加-e也沒(méi)問(wèn)題),可以發(fā)現(xiàn)處理后的數(shù)據(jù)已經(jīng)正確的打印出來(lái)了,如果你再去查看1.log
的數(shù)據(jù),會(huì)發(fā)現(xiàn)sed 并不會(huì)修改源文件中的數(shù)據(jù)。如果需要把生成的新數(shù)據(jù)輸出到一個(gè)特定的文件中,可以使用重定向大于號(hào):
(3)將命令寫在文件中
有時(shí)我們會(huì)反復(fù)用一些命令,如果每次都需要手動(dòng)輸入那就太麻煩了,好在我們可以把這些匹配命令寫在一個(gè)文件中
看上圖,我們現(xiàn)在把命令寫在了
s.sed
文件中,運(yùn)行sed命令只需要在前面加-f就可以了,是不是很方便。(4)替換標(biāo)記
我們可以認(rèn)為每個(gè)替換命令就是一個(gè)正則表達(dá)式,所以每單個(gè)命令在一行中只會(huì)被使用一次,靠前的命令會(huì)被優(yōu)先使用,要想全局匹配可以在命令后面加一個(gè)g
可以發(fā)現(xiàn)第一行在加上g的情況下,已經(jīng)被完全匹配,這個(gè)g也可以被數(shù)字代替,指定替換第幾個(gè)位置。
也可以使用w來(lái)將生成的新數(shù)據(jù)輸入到文件中,但是在多條命令情況不是很好用!
(5)單行替換
文章開頭說(shuō)了,sed會(huì)一行一行的查詢,有時(shí)我們只想替換指定行的數(shù)據(jù),那應(yīng)該怎么辦呢?可以在s字母前面加一個(gè)數(shù)字代表第幾行
看上圖只替換了第二行的數(shù)據(jù)。
我們還可以指定行區(qū)間`開始行+逗號(hào)+結(jié)束行`
如上圖,第一條命令替換第二行和第三行的數(shù)據(jù)($代表最后一行)
注意,對(duì)于這種方式的多條命令指定的行數(shù)只對(duì)單條命令生效!當(dāng)然我們可以用大括號(hào)將所有的匹配命令括起來(lái),把指定的行放在大括號(hào)的左側(cè),那么指定的行就會(huì)作用于多條命令,如下圖:
另外還有一種方式可以指定特定的行,就是在s前面再加一個(gè)文本匹配命令,如下圖:
我們用These這個(gè)字符匹配第二行(These字符串前面必須加上斜杠)
(1)上面介紹的指定行數(shù)也適用于刪除命令
無(wú)論是行數(shù)字匹配還是文本匹配都沒(méi)問(wèn)題。
還可以使用匹配文本的方式刪除區(qū)間,如下圖:
匹配了These和Those字符之間的三行。
這兩個(gè)命令和js中insert、append語(yǔ)義一樣,果然語(yǔ)言都是相通的!
這兩個(gè)命令比較簡(jiǎn)單,但是要注意前面的行不能是區(qū)間,這個(gè)應(yīng)該比較好理解!
這個(gè)命令會(huì)替換整行數(shù)據(jù),修改行可以使用行數(shù)區(qū)間
命令格式 y/originchar/replacechar/,originchar和replacechar必須一一對(duì)應(yīng)的,否則會(huì)報(bào)錯(cuò)!
這個(gè)也比較簡(jiǎn)單就不多說(shuō)了。
上面我們提到向文件中輸出數(shù)據(jù)可以使用w,那么從文件中讀取數(shù)據(jù)可以用r,如下圖:
我們很輕松的就將
2.log
文件的數(shù)據(jù)讀了出來(lái)并且插入到了1.log
最后。r前面可以是行數(shù)也可以是文本匹配。
這里只是sed命令的一部分,還有很多其他的用法,后續(xù)有空我再接著寫!
另外,前端學(xué)習(xí)linux命令還是很有必要的,因?yàn)槲覀円?jīng)常使用node,它無(wú)論作為服務(wù)器還是工具都可以配合這些命令。
喜歡我的回答就關(guān)注我吧,有問(wèn)題可以發(fā)表評(píng)論,我們一起學(xué)習(xí),共同成長(zhǎng)!