sed命令介紹
sed是一種流編輯器屋吨,它是文本處理中非常有用的工具针贬,能夠完美的配合正則表達(dá)式使用弧圆,功能不同凡響赋兵。處理時(shí),把當(dāng)前處理的行存儲(chǔ)在臨時(shí)緩沖區(qū)中搔预,稱為『模式空間』(pattern space)霹期,接著用sed命令處理緩沖區(qū)中的內(nèi)容,處理完成后拯田,把緩沖區(qū)的內(nèi)容送往屏幕历造。接著處理下一行,這樣不斷重復(fù)吭产,直到文件末尾。文件內(nèi)容并沒有改變鸭轮,除非你使用重定向存儲(chǔ)輸出。sed主要用來自動(dòng)編輯一個(gè)或多個(gè)文件窃爷,簡(jiǎn)化對(duì)文件的反復(fù)操作姓蜂,編寫轉(zhuǎn)換程序等。
基本語(yǔ)法
sed的命令格式:sed [options] 'command' file(s)
sed的腳本格式:sed [options] -f scriptfile file(s)
參數(shù)
參數(shù) | 完整參數(shù) | 說明 |
---|---|---|
-e script | -expression=script | 以選項(xiàng)中的指定的script來處理輸入的文本文件 |
-f script | --files=script | 以選項(xiàng)中的指定的script文件來處理輸入的文本文件 |
-h | --help | 顯示幫助 |
-n | --quiet --silent | 僅顯示script處理后的結(jié)果 |
-V | --version | 顯示版本信息 |
命令
命令 | 說明 |
---|---|
d | 刪除覆糟,刪除選擇的行 |
D | 刪除模板塊的第一行 |
s | 替換指定字符 |
h | 拷貝模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū) |
H | 追加模板塊的內(nèi)容到內(nèi)存中的緩沖區(qū) |
g | 獲得內(nèi)存緩沖區(qū)的內(nèi)容遮咖,并替代當(dāng)前模板塊中文本 |
G | 獲得內(nèi)存緩沖區(qū)的內(nèi)容,并追加到當(dāng)前模板塊文本的后面 |
l | 列表不能打印字符的清單 |
n | 讀取下一個(gè)輸入行御吞,用下一個(gè)命令處理新的行而不是第一個(gè)命令 |
N | 追加下一個(gè)輸入行到模板塊后面并在二者間嵌入一個(gè)新行,改變當(dāng)前行號(hào)碼 |
p | 打印模板塊的行 |
P | 打印模板塊的第一行 |
q | 退出sed |
b label | 分支到腳本中帶有標(biāo)記的地方陶珠,如果分支不存在則分支到腳本的末尾 |
r file | 從file中讀行 |
t label | if分支挟裂,從最后一行開始揍诽,條件一旦滿足或者T诀蓉,t命令,將導(dǎo)致分支到帶有標(biāo)號(hào)的命令處暑脆,或者到腳本的末尾 |
T label | 錯(cuò)誤分支渠啤,從最后一行開始,一旦發(fā)生錯(cuò)誤或者T添吗,t命令沥曹,將導(dǎo)致分支到帶有標(biāo)號(hào)的命令處,或者到腳本的末尾 |
w file | 寫并追加模板塊到file末尾 |
W file | 寫并追加模板塊的第一行到file末尾 |
! | 表示后面的命令對(duì)所有沒有被選定的行發(fā)生作用 |
= | 打印當(dāng)前行號(hào) |
# | 把注釋擴(kuò)展到第一個(gè)換行符以前 |
接下來主要介紹替換功能
替換的使用
命令 | 說明 |
---|---|
g | 表示行內(nèi)全面替換 |
p | 表示打印行 |
w | 表示把行寫入一個(gè)文件 |
x | 表示互換模板塊中的文本和緩沖區(qū)中的文本 |
y | 表示把一個(gè)字符翻譯為另外的字符(但是不用于正則表達(dá)式) |
\1 | 子串匹配標(biāo)記 |
& | 已匹配字符串標(biāo)記 |
當(dāng)然要使用其功能需要對(duì)正則表達(dá)式
有一定了解碟联。這里不在介紹妓美。
使用例子
創(chuàng)建一個(gè)文檔hello.txt:
you are a boy.
hello
my name is han.
hello
hello,how do you do.
hello
nice to meet you. good job.
開始操作O(∩_∩)O~
替換hello成world,并打印到屏幕上
sed 's/hello/world/' hello.txt
s 表示替換
hello 表示匹配的字母鲤孵,是正則表達(dá)式
world 表示需要替換成的字母
執(zhí)行結(jié)果:
當(dāng)我們打開文件時(shí)壶栋,發(fā)現(xiàn)并沒有改變。這里只是替換緩存區(qū)內(nèi)的內(nèi)容普监,并不改變文件里的內(nèi)容委刘。
從開始位置替換,并加上回車
sed 's/^hello/world\n/' hello.txt
執(zhí)行結(jié)果:
如果文件太大鹰椒,這樣打印就會(huì)顯示很多不必要的內(nèi)容锡移,這樣我們就可以使用只打印被匹配的行的命令。
只顯示被匹配的行
sed -n 's/hello/world/p' hello.txt
n和p的意思上文有介紹 不再解釋漆际。
執(zhí)行結(jié)果:
值得注意的是淆珊,如果想要回寫到文件中(和-i連用),不要只打印當(dāng)前匹配航奸汇,否者只會(huì)保存當(dāng)前匹配行施符,其他的丟失往声。
替換文件中的內(nèi)容,并寫到文件里
sed -i 's/o/ABC/' hello.txt
執(zhí)行結(jié)果:
執(zhí)行cat查看文件內(nèi)容:
可以看到雖然替換了戳吝,但是只替換了第一個(gè)被匹配的到內(nèi)容浩销。
如果想全部替換到字母'o',就需要使用參數(shù)'g'听哭。
全部替換慢洋,,并寫到文件里
sed -i 's/o/ABC/g' hello.txt
執(zhí)行后陆盘,全部的'o'普筹,都被替換了。
如果想批量修改代碼中的內(nèi)容使用它還是很方便的隘马。O(∩_∩)O哈哈~