【現(xiàn)學(xué)現(xiàn)忘&Shell編程】— 35.sed命令(一)

1、sed命令說明

sed主要是用來將數(shù)據(jù)進(jìn)行選取沃斤、替換映皆、刪除、新增的命令轰枝,grep捅彻,awksed稱為是文本操作三劍客鞍陨。

我們看看sed命令的語法格式:

[root@localhost ~]# sed [選項(xiàng)] '[動作]' 文件名

選項(xiàng):

  • -n:一般sed命令會把所有數(shù)據(jù)都輸出到屏幕步淹,如果加入此選擇,則只會把經(jīng)過sed命令處理的行輸出到屏幕诚撵。
  • -e:允許對輸入數(shù)據(jù)應(yīng)用多條sed命令編輯缭裆。
  • -f 腳本文件名:從sed腳本中讀入sed操作。和awk命令的-f非常類似寿烟。
  • -r:在sed中支持?jǐn)U展正則表達(dá)式澈驼。
  • -i:用sed的修改結(jié)果直接修改讀取數(shù)據(jù)的文件,而不是由屏幕輸出筛武。

動作:

  • a \:追加缝其,在當(dāng)前行后添加一行或多行。添加多行時徘六,除最后一行外内边,每行末尾需要用\代表數(shù)據(jù)未完結(jié)。(如果不添加多行待锈,就忽略\
  • c \:行替換漠其,用c后面的字符串替換原數(shù)據(jù)行,替換多行時竿音,除最后一行外和屎,每行末尾需用\代表數(shù)據(jù)未完結(jié)。(如果不添加多行春瞬,就忽略\
  • i \:插入柴信,在當(dāng)期行前插入一行或多行。插入多行時快鱼,除最后一行外颠印,每行末尾需要用\代表數(shù)據(jù)未完結(jié)纲岭。(如果不添加多行,就忽略\
  • d:刪除线罕,刪除指定的行止潮。
  • p:打印,輸出指定的行钞楼。
  • s:字串替換喇闸,用一個字符串替換另外一個字符串。格式為行范圍 s/舊字串/新字串/g(和vim中的替換格式類似)询件。

提示:

對于sed命令大家要注意燃乍,sed所做的修改并不會直接改變文件的內(nèi)容(如果是用管道符接收的命令的輸出,這種情況連文件都沒有)宛琅,而是把修改結(jié)果只顯示到屏幕上刻蟹,除非使用-i選項(xiàng)才會直接修改文件。

小說明:

vim可以直接修改文件內(nèi)容嘿辟,我們使用的也非常多舆瘪,為什么還要學(xué)sed命令呢?

因?yàn)関im需要我們手動和計算機(jī)交互红伦,需要手動輸入一些編輯指令英古,保存指令,切換模式指令等昙读,才能完成vim的編輯操作召调。

在Shell中很難做到人機(jī)交互,所以vim操作沒有辦法在Shell程序使用蛮浑,因此要通過sed命令來完成唠叛,這是Shell中修改文件內(nèi)容最最最主要的方式。

2陵吸、行數(shù)據(jù)操作

使用如下文本student.txt

ID      Name    Python  Linux   MySQL   Java
1       Tangs   88      87      86      85.55   
2       Sunwk   99      98      97      96,66   
3       Zhubj   77      76      75      74.44   
4       Shahs   66      65      64      63.33 

(1)查看文件中的數(shù)據(jù)

我們舉幾個例子來看看sed命令到底是干嘛的玻墅。

查看下student.txt文件的第二行介牙,那么就可以利用p動作壮虫,執(zhí)行如下命令:

[root@localhost tmp]# sed '2p' student.txt 
ID  Name    Python  Linux   MySQL   Java
1   Tangs   88      87      86      85.55
1   Tangs   88      87      86      85.55
2   Sunwk   99      98      97      96.66
3   Zhubj   77      76      75      74.44
4   Shahs   66      65      64      63.33

從上面的結(jié)果可以看出,p命令確實(shí)輸出了第二行數(shù)據(jù)环础,但是sed命令還會把所有數(shù)據(jù)都輸出一次囚似,這時就會看到這個比較奇怪的結(jié)果,第二行的數(shù)據(jù)有兩次的輸出线得。

那如果想指定輸出某行數(shù)據(jù)饶唤,就需要-n選項(xiàng)的幫助。

[root@localhost tmp]# sed -n '2p' student.txt 
1   Tangs   88  87  86  85.55

(2)刪除文件中的數(shù)據(jù)

刪除student.txt文本中第二行到第四行的數(shù)據(jù)贯钩,命令如下:

[root@localhost tmp]# sed  '2,4d' student.txt 
ID  Name    Python  Linux   MySQL   Java
4   Shahs   66      65      64      63.33

2,4表示刪除2至4行的數(shù)據(jù)募狂。

但是這里要注意的是办素,我上邊的操作,并沒有寫入到文件中祸穷,我們可以查看student.txt文本中的內(nèi)容:

[root@localhost tmp]# cat student.txt 
ID  Name    Python  Linux   MySQL   Java
1   Tangs   88      87      86      85.55
2   Sunwk   99      98      97      96.66
3   Zhubj   77      76      75      74.44
4   Shahs   66      65      64      63.33

可以看到student.txt文本中的內(nèi)容還在性穿,sed命令只是在輸出的時候,把數(shù)據(jù)過濾掉了雷滚。

如果需要在刪除內(nèi)容的同時需曾,再寫入文件,就需要-i選項(xiàng)了祈远。

執(zhí)行命令:

[root@localhost tmp]# sed -i '2,4d' student.txt就可以了呆万。

(3)向文件中追加數(shù)據(jù)

需求:在student.txt文本中第三行后面添加66666666666666

執(zhí)行命令如下:

[root@localhost tmp]# sed "3a 66666666666666" student.txt 
ID  Name    Python  Linux   MySQL   Java
1   Tangs   88      87      86      85.55
2   Sunwk   99      98      97      96.66
66666666666666
3   Zhubj   77      76      75      74.44
4   Shahs   66      65      64      63.33

同理,student.txt文本中的內(nèi)容并沒有被改變车份,如果需要改變student.txt文本中的內(nèi)容谋减,添加-i選項(xiàng)。

注意:sed命令的選項(xiàng)要寫在單引號(雙引號也可以)之外扫沼,如:

[root@localhost tmp]# sed -i "3a 66666666666666" student.txt

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末逃顶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子充甚,更是在濱河造成了極大的恐慌以政,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,423評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件伴找,死亡現(xiàn)場離奇詭異盈蛮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)技矮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評論 2 385
  • 文/潘曉璐 我一進(jìn)店門抖誉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人衰倦,你說我怎么就攤上這事袒炉。” “怎么了樊零?”我有些...
    開封第一講書人閱讀 157,019評論 0 348
  • 文/不壞的土叔 我叫張陵我磁,是天一觀的道長。 經(jīng)常有香客問我驻襟,道長夺艰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,443評論 1 283
  • 正文 為了忘掉前任沉衣,我火速辦了婚禮郁副,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘豌习。我一直安慰自己存谎,他們只是感情好拔疚,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,535評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著既荚,像睡著了一般草雕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上固以,一...
    開封第一講書人閱讀 49,798評論 1 290
  • 那天墩虹,我揣著相機(jī)與錄音,去河邊找鬼憨琳。 笑死诫钓,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的篙螟。 我是一名探鬼主播菌湃,決...
    沈念sama閱讀 38,941評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼遍略!你這毒婦竟也來了惧所?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,704評論 0 266
  • 序言:老撾萬榮一對情侶失蹤绪杏,失蹤者是張志新(化名)和其女友劉穎下愈,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蕾久,經(jīng)...
    沈念sama閱讀 44,152評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡势似,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,494評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了僧著。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片履因。...
    茶點(diǎn)故事閱讀 38,629評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖盹愚,靈堂內(nèi)的尸體忽然破棺而出栅迄,到底是詐尸還是另有隱情,我是刑警寧澤皆怕,帶...
    沈念sama閱讀 34,295評論 4 329
  • 正文 年R本政府宣布毅舆,位于F島的核電站,受9級特大地震影響端逼,放射性物質(zhì)發(fā)生泄漏朗兵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,901評論 3 313
  • 文/蒙蒙 一顶滩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧寸爆,春花似錦礁鲁、人聲如沸盐欺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽冗美。三九已至,卻和暖如春析二,著一層夾襖步出監(jiān)牢的瞬間粉洼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評論 1 266
  • 我被黑心中介騙來泰國打工叶摄, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留属韧,地道東北人。 一個月前我還...
    沈念sama閱讀 46,333評論 2 360
  • 正文 我出身青樓蛤吓,卻偏偏與公主長得像宵喂,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子会傲,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,499評論 2 348