shell編程-sed

一躲因、語法

sed [-hnV][-e<script>][-f<script文件>][文本文件]

參數(shù)說明:

-e<script>或--expression=<script> 以選項中指定的script來處理輸入的文本文件作彤。
-f<script文件>或--file=<script文件> 以選項中指定的script文件來處理輸入的文本文件第练。
-h或--help 顯示幫助二驰。
-n或--quiet或--silent 僅顯示script處理后的結(jié)果。
-V或--version 顯示版本信息稿静。

動作說明

a :新增梭冠, a 的后面可以接字串,而這些字串會在新的一行出現(xiàn)(目前的下一行)
c :取代改备, c 的后面可以接字串控漠,這些字串可以取代 n1,n2 之間的行
d :刪除,因為是刪除啊悬钳,所以 d 后面通常不接任何咚咚
i :插入盐捷, i 的后面可以接字串,而這些字串會在新的一行出現(xiàn)(目前的上一行)
p :打印默勾,亦即將某個選擇的數(shù)據(jù)印出碉渡。通常 p 會與參數(shù) sed -n 一起運行
s :取代,可以直接進(jìn)行取代的工作哩母剥!通常這個 s 的動作可以搭配正規(guī)表示法滞诺!例如 1,20s/old/new/g

注:

在sed后加上-i執(zhí)行后會修改原文件
$代表最后的意思

二、以行為單位的新增/刪除

1.刪除2~5行刪除
sed '2,5d'
2.只刪除第2行
sed '2d'
3.刪除第3到最后一行
sed '3,$d'
4.在第2行后(亦即是加在第三行)加上drink tea环疼?字樣
sed '2a drink tea?'
5.在第2行前加上drink tea习霹?字樣
sed '2i drink tea?'
6.2行之后追加兩行,例如Hello......與shell!
sed '2a Hello......\
\>shell!'
sed '2a Hello......\shell!'
7.2行之后追加三行(2行文字,1行空行)
sed '2a Hello......\shell!\n'
8.2行之后追加一行空行
sed '2a \ '
sed '2a \\'
9.2行之后追加兩行空行
sed '2a \\n'

三炫隶、以行為單位的替換與顯示

1.將2~5行的內(nèi)容取代成Hello shell
sed '2,5c Hello shell'
2.顯示文件的5~7行
sed -n '5,7p'

四淋叶、數(shù)據(jù)的搜尋并顯示

1.搜索有關(guān)root關(guān)鍵字的行
sed -n '/root/p'

使用-n的時候只打印包含模板的行

五、數(shù)據(jù)的搜尋并刪除

1.刪除包含root的行伪阶,其他行輸出
sed '/root/d'

六爸吮、數(shù)據(jù)的搜尋并執(zhí)行命令

1.找到root對應(yīng)的行,執(zhí)行后面花括號中的一組命令望门,每個命令之間用分號分隔,這里Hello替換成bash
sed -n '/root{s/Hello/bash/;p;q}'

最后的q是退出

七、數(shù)據(jù)的搜尋并替換

1.基本格式
sed 's/要被取代的字符串/新的字符串/g'
2.文本里每一行結(jié)尾若為.則換成锰霜!
sed 's/\\.$/\\!/g'
例:提取ip
/sbin/ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.116  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::f816:3eff:fe47:959d  prefixlen 64  scopeid 0x20<link>
        ether fa:16:3e:47:95:9d  txqueuelen 1000  (Ethernet)
        RX packets 1388641  bytes 402972654 (384.3 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1408963  bytes 164970470 (157.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

/sbin/ifconfig eth0 | grep 'inet'     //inet后邊沒有空格
        inet 192.168.0.116  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::f816:3eff:fe47:959d  prefixlen 64  scopeid 0x20<link>
/sbin/ifconfig eth0 | grep 'inet '    //inet后邊有一個空格
        inet 192.168.0.116  netmask 255.255.255.0  broadcast 192.168.0.255

/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/inet //g'    //無^.*inet 
        192.168.0.116  netmask 255.255.255.0  broadcast 192.168.0.255
/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*inet //g'
192.168.0.116  netmask 255.255.255.0  broadcast 192.168.0.255

/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/netmask//g'    //無netmask.*$
192.168.0.116   255.255.255.0  broadcast 192.168.0.255
/sbin/ifconfig eth0 | grep 'inet ' | sed 's/^.*inet //g' |sed 's/netmask.*$//g'
192.168.0.116    //獲得ip

八筹误、多點編輯

1.刪除第3行到末尾的數(shù)據(jù),并把bash替換成Hello
sed -e '3,$d' -e 's/bash/Hello/'

-e表示多點編輯,第一個編輯命令刪除第3行到末尾的數(shù)據(jù)癣缅,第二條命令搜索bash替換為Hello

示例文件
#vim shell_sed.txt
zhangsan
zhangsan
lisi
lisi

wangwu
wangwu
用ergou替換lisi:
#sed -i 's/lisi/ergou/' shell_sed.txt
使用多重指令:
#sed -i 's/lisi/ergou/ ; s/zhangsan/lisi/' shell_sed.txt
使用腳本文件:
腳本:name
s/lisi/ergou/
s/zhangsan/lisi/
sed -f name shell_sed.txt
sed -f name shell_sed.txt >newshell_sed.txt //執(zhí)行腳本并保存修改后的文件

sed流編輯器用法及解析

sed '1d' shell_sed.txt  //刪除文件的第一行
sed '1,2d' shell_sed.txt  //刪除文件的第一厨剪、第二行
sed '2,$d' shell_sed.txt  //刪除文件的第二行到最后一行
sed '/root/d' shell_sed.txt  //刪除匹配到root的一行
sed '/root/2d' shell_sed.txt  //刪除匹配到root的一行以及下一行
sed '1~2d' shell_sed.txt  //刪除奇數(shù)行
sed '0~2d' shell_sed.txt  //刪除偶數(shù)行
sed 's/wangwu/lisi/g' shell_sed.txt  //全局替換
sed 's/wangwu/lisi/gi' shell_sed.txt  //忽略大小寫的全局替換
sed '/^$/d' shell_sed.txt  //刪除空行
sed -i.bak 's/wangwu/lisi/' shell_sed.txt  //產(chǎn)生一個備份的文件以防后悔 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市友存,隨后出現(xiàn)的幾起案子祷膳,更是在濱河造成了極大的恐慌,老刑警劉巖屡立,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件直晨,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機勇皇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門罩句,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人敛摘,你說我怎么就攤上這事门烂。” “怎么了兄淫?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵屯远,是天一觀的道長。 經(jīng)常有香客問我捕虽,道長慨丐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任薯鳍,我火速辦了婚禮咖气,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挖滤。我一直安慰自己崩溪,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布斩松。 她就那樣靜靜地躺著伶唯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪惧盹。 梳的紋絲不亂的頭發(fā)上乳幸,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機與錄音钧椰,去河邊找鬼粹断。 笑死,一個胖子當(dāng)著我的面吹牛嫡霞,可吹牛的內(nèi)容都是我干的瓶埋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼诊沪,長吁一口氣:“原來是場噩夢啊……” “哼养筒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起端姚,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤晕粪,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后渐裸,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體巫湘,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡装悲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了剩膘。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衅斩。...
    茶點故事閱讀 39,841評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖怠褐,靈堂內(nèi)的尸體忽然破棺而出畏梆,到底是詐尸還是另有隱情,我是刑警寧澤奈懒,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布奠涌,位于F島的核電站,受9級特大地震影響磷杏,放射性物質(zhì)發(fā)生泄漏溜畅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一极祸、第九天 我趴在偏房一處隱蔽的房頂上張望慈格。 院中可真熱鬧,春花似錦遥金、人聲如沸浴捆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽选泻。三九已至,卻和暖如春美莫,著一層夾襖步出監(jiān)牢的瞬間页眯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工厢呵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留窝撵,地道東北人。 一個月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓襟铭,卻偏偏與公主長得像忿族,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子蝌矛,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,781評論 2 354