sed 基本使用

寫(xiě)在前面

本篇是個(gè)人學(xué)習(xí)整理筆記而得掸冤。
原書(shū):Sed and Awk 101 Hacks -中文版
引用書(shū)結(jié)尾的一句話:
Knowledge is not one man’s Entity

sed 基本使用

1. 項(xiàng)目列表 執(zhí)行多條指令

sed -n -e'/^root/p' -e'/^nobody/p' /etc/passwd
sed -n '{/^root/p/^nobody/p}' /etc/passwd

2. sed的執(zhí)行流程

Sed 腳本執(zhí)行遵從下面簡(jiǎn)單易記的順序:Read,Execute,Print,Repeat(讀取箩绍,執(zhí)行,打印,重復(fù))洋满,簡(jiǎn)稱(chēng) REPR
分析腳本執(zhí)行順序:

  • 讀取一行到模式空間(sed 內(nèi)部的一個(gè)臨時(shí)緩存孝赫,用于存放讀取到的內(nèi)容)。
  • 在模式空間中執(zhí)行命令几迄。如果使用了{(lán) } 或 --e 指定了多個(gè)命令蔚龙,sed 將依次執(zhí)行每個(gè)命令。
  • 打印模式空間的內(nèi)容映胁,然后清空模式空間木羹。
  • 重復(fù)上述過(guò)程,直到文件結(jié)束解孙。

3. 打印模式空間

### 打印所有
sed -n 'p' employee.txt 

### 打印指定一行
sed -n '2 p' employee.txt 

### 打印指定幾行
sed -n '1,3 p' employee.txt 

### 打印指定行到結(jié)尾
sed -n '4,$ p' employee.txt

4. 刪除行

用法和打印行基本一致坑填,匹配需要?jiǎng)h除的行,使用刪除命令 "d"

### 刪除所有空行
sed '/^$/d' employee.txt

### 刪除所有注釋行(假定注釋行以#開(kāi)頭)
sed '/^#/d' employee.txt

### 注意:如果有多個(gè)命令弛姜,sed 遇到命令 d 時(shí)脐瑰,會(huì)刪除匹配到的整行數(shù)據(jù),其余的命令將無(wú)法操作被刪除的行娱据。

5. 模式空間輸出到文件

用法和打印行基本一致蚪黑,匹配需要?jiǎng)h除的行盅惜,使用刪除命令 "w"

### 將 2-3 行輸出到 output.tmp 文件
sed -n '2,3 w output.tmp' employee.txt 

6. 替換

### 替換所有行
sed 's/Manager/Diractor/' employee.txt

### 替換匹配到Sales的行
sed '/Sales/s/Manager/Diractor/' employee.txt 

### 默認(rèn)情況下,sed會(huì)替換一行中第一次匹配到的字符串
sed 's/a/A/' employee.txt

### 使用全局標(biāo)志g忌穿,可以替換所有出現(xiàn)的字符串
sed 's/a/A/g' employee.txt

### 使用數(shù)字標(biāo)志抒寂,可以只替換每行第n次字符串的出現(xiàn)
sed 's/a/A/2' employee.txt

### 打印標(biāo)志p,配合-n s一起使用掠剑,只顯示被替換的行
sed -n 's/locate/find/2 p' sl-test.txt

### 替換后寫(xiě)標(biāo)志w
sed 's/locate/find/2 w output.tmp' sl-test.txt

### 忽略大小寫(xiě)標(biāo)志i
sed -n 's/john/Johnny/i p' employee.txt

### 執(zhí)行命令標(biāo)志e
# 可以將模式空間的內(nèi)容作為shell命令執(zhí)行彬返回結(jié)果到模式空間
cat files.txt 
/etc/passwd
/etc/group
sed 's/^/ls -l /e' files.txt 
-rw-r--r--. 1 root root 1775 6月  12 16:39 /etc/passwd
-rw-r--r--. 1 root root 873 6月  12 16:39 /etc/group

### 標(biāo)志組合
sed -n 's/manager/Director/igpw output.tmp' employee.txt 

### 替換模式的分隔符
# 可以使用任意的字符作為sed替換命令的分界符
sed 's/\/usr\/local\/bin/\/usr\/bin/' path.txt
# 等價(jià)于
sed 's@/usr/local/bin@/usr/bin@' path.txt
sed 's!/usr/local/bin!/usr/bin!'  path.txt

### & 的作用——獲取匹配到模式
sed 's/^[0-9][0-9][0-9]/[&]/' employee.txt

### 分組以 \( 開(kāi)始屈芜,以 \) 結(jié)束單個(gè)分組:
sed 's/\([^,]*\).*/\1/g' employee.txt
### 上面例子中:
# 正則表達(dá)式\([^,]*\)匹配字符串從開(kāi)頭到第一個(gè)逗號(hào)之間的所有字符(并將其放入第一個(gè)分組中)
# replacement-string 中的\1 將替代匹配到的分組
# g 即是全局標(biāo)志

### 分組替換(多個(gè)分組)
sed 's/^\([^,]*\),\([^,]*\),\([^,]*\)/\1,\3/' employee.txt

### 使用 sed 可以把 DOS 的換行符(CR/LF)替換為 Unix 格式。當(dāng)把 DOS 格式的文件拷到 Unix 上朴译,你會(huì)發(fā)現(xiàn)井佑,每行結(jié)尾都有\(zhòng)r\n .
# 使用 sed 把 DOS  格式的文件轉(zhuǎn)換為 Unix  格式:
sed 's/.$//' filename

7. sed腳本

### 可以重復(fù)使用一組sed語(yǔ)句
cat run.sed 
s/\([^,]*\),\([^,]*\),\(.*\).*/\2,\1, \3/g
s/^.*/<&>/
s/Developer/IT Manager/
s/Manager/Director/
sed -f run.sed employee.txt 
<John Doe,101, CEO>
<Jason Smith,102, IT Director>
<Raj Reddy,103, Sysadmin>
<Anand Ram,104, IT Director>
<Jane Miller,105, Sales Director>

### 用做命令解釋器
cat run.sed 
#!/bin/sed -f
s/\([^,]*\),\([^,]*\),\(.*\).*/\2,\1,\3/g
s/^.*/<&>/
s/Developer/IT Manager/
s/Manager/Director/
./run.sed employee.txt 
<John Doe,101, CEO>
<Jason Smith,102, IT Director>
<Raj Reddy,103, Sysadmin>
<Anand Ram,104, IT Director>
<Jane Miller,105, Sales Director>

### 屏蔽默認(rèn)輸出-nf
cat test.sed 
#!/bin/sed -nf
/root/p
/nobody/p
/mail/p
/mail/p

8. 修改文件

### 常用重定向和w命令
sed 's/John/Johnny/' employee.txt > new-employee.txt
sed 's/John/Johnny/w new-employee.txt' employee.txt

### 使用-i命令,會(huì)直接修改原文件# 可以使用{-i + 擴(kuò)展名}來(lái)備份原文件
sed -i.bak 's/John/Johnny/' employee.txt

### 上邊語(yǔ)句等價(jià)于-i的全名–in-place
sed –in-place=.bak 's/John/Johnny/' employee.txt
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末眠寿,一起剝皮案震驚了整個(gè)濱河市躬翁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盯拱,老刑警劉巖盒发,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異狡逢,居然都是意外死亡宁舰,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)奢浑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蛮艰,“玉大人,你說(shuō)我怎么就攤上這事雀彼∪姥粒” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵详羡,是天一觀的道長(zhǎng)仍律。 經(jīng)常有香客問(wèn)我,道長(zhǎng)实柠,這世上最難降的妖魔是什么水泉? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮窒盐,結(jié)果婚禮上草则,老公的妹妹穿的比我還像新娘。我一直安慰自己蟹漓,他們只是感情好炕横,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著葡粒,像睡著了一般份殿。 火紅的嫁衣襯著肌膚如雪膜钓。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天卿嘲,我揣著相機(jī)與錄音颂斜,去河邊找鬼。 笑死拾枣,一個(gè)胖子當(dāng)著我的面吹牛沃疮,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播梅肤,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼司蔬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了姨蝴?” 一聲冷哼從身側(cè)響起俊啼,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎似扔,沒(méi)想到半個(gè)月后吨些,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體搓谆,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡炒辉,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泉手。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片黔寇。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖斩萌,靈堂內(nèi)的尸體忽然破棺而出缝裤,到底是詐尸還是另有隱情,我是刑警寧澤颊郎,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布憋飞,位于F島的核電站,受9級(jí)特大地震影響姆吭,放射性物質(zhì)發(fā)生泄漏榛做。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一内狸、第九天 我趴在偏房一處隱蔽的房頂上張望检眯。 院中可真熱鬧,春花似錦昆淡、人聲如沸锰瘸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)避凝。三九已至舞萄,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間管削,已是汗流浹背鹏氧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留佩谣,地道東北人把还。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像茸俭,于是被迫代替她去往敵國(guó)和親吊履。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • grep擅長(zhǎng)查找调鬓,awk擅長(zhǎng)分析(select)艇炎,sed擅長(zhǎng)批量編輯行 概述 SED的英文全稱(chēng)是 Stream E...
    piziyang12138閱讀 935評(píng)論 0 3
  • grep擅長(zhǎng)查找,awk擅長(zhǎng)分析(select)腾窝,sed擅長(zhǎng)批量編輯行概述SED的英文全稱(chēng)是 Stream EDi...
    Arroganter閱讀 1,075評(píng)論 0 7
  • 一缀踪、sed編輯器簡(jiǎn)介 sed編輯器被稱(chēng)作流編輯器(stream editor),和普通的交互式文本編輯器恰好相反虹脯。...
    生信擺渡閱讀 289評(píng)論 0 1
  • 一驴娃、前言 我們都知道,在Linux中一切皆文件循集,比如配置文件唇敞,日志文件,啟動(dòng)文件等等咒彤。如果我們相對(duì)這些文件進(jìn)行一些...
    以七v為書(shū)閱讀 1,518評(píng)論 0 5
  • 1 沒(méi)錯(cuò)疆柔,說(shuō)的就是你。 從小學(xué)一直到高中镶柱,我們不允許被談戀愛(ài)旷档,要好好學(xué)習(xí)。甚至到了大學(xué)歇拆,一些“喪心病狂”的家長(zhǎng)還告...
    發(fā)電雞閱讀 326評(píng)論 1 3