一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

關(guān)于Linux中的sed簡易介紹與工作原理

Linux愛好者 ? 來源:CSDN技術(shù)社區(qū) ? 作者:chopin11vip ? 2021-03-26 15:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

介紹

熟悉 Linux 的同學(xué)一定知道大名鼎鼎的 Linux 三劍客,它們是 grep、awk、sed,我們今天要聊的主角就是 sed。

sed 全名叫 stream editor,流編輯器,用程序的方式來編輯文本,與 vim 的交互式編輯方式截然不同。它的功能十分強(qiáng)大,加上正則表達(dá)式的支持,可以進(jìn)行大量的復(fù)雜文本的編輯操作。

實際上 sed 提供的功能非常復(fù)雜,有專門的書籍講解它。本文不會講 sed 的全部東西,只會從 sed 的工作原理、常見使用方法等方面進(jìn)行說明和講解,同時也會給出大量的實踐用例來幫助更好的理解 sed 基本用法。文中的知識點真正掌握后,足以應(yīng)付平時工作中的基本需求。

它有自己的使用場景:

自動化程序中,不適合交互方式編輯的;

大批量重復(fù)性的編輯需求;

編輯命令太過復(fù)雜,在交互文本編輯器難以輸入的情況;

工作原理

sed 作為一種非交互式編輯器,它使用預(yù)先設(shè)定好的編輯指令對輸入的文本進(jìn)行編輯,完成之后輸出編輯結(jié)果。

簡單描述 sed 工作原理:

sed 從輸入文件中讀取內(nèi)容,每次處理一行內(nèi)容,并把當(dāng)前的一行內(nèi)容存儲在臨時的緩沖區(qū)中,稱為 模式空間。

接著用 sed 命令處理緩存區(qū)中的內(nèi)容;

處理完畢后,把緩存區(qū)的內(nèi)容送往屏幕;

接著處理下一行;

這樣不斷重復(fù),直到文件末尾,文件內(nèi)容并沒有改變,除非你使用重定向輸出或指定了 i 參數(shù)

正則表達(dá)式

sed 基本上就是在玩正則表達(dá)式模式匹配,所以,會玩 sed 的人,正則表達(dá)式能力一般都比較強(qiáng)。正則表達(dá)式內(nèi)容相對較多,本節(jié)不會重點講解正則表達(dá)式。

為了能夠讓大部分朋友比較輕松地學(xué)習(xí)本文知識,這里還是簡單介紹下正則表達(dá)式的基本內(nèi)容。如果是專門做正則編程開發(fā)的,可以去買本正則的書籍來看。

(一)基本正則表達(dá)式

。,表示匹配任意一個字符,除了換行符,類似 Shell 通配符中的 ?;

*,表示前邊字符有 0 個或多個;

.*,表示任意一個字符有 0 個或多個,也就是能匹配任意的字符;

^,表示行首,也就是每一行的開始位置,^abc 匹配以 abc 開頭的字符串;

$,表示行尾,也就是每一行的結(jié)尾位置,}$ 匹配以大括號結(jié)尾的字符串;

{},表示前邊字符的數(shù)量范圍,{2},表示重復(fù) 2 次,{2,}重復(fù)至少 2次,{2,4} 重復(fù) 2-4 次;

[],括號中可以包含表示字符集的表達(dá)式,使用方法大概如下幾種

5303b5a8-8d80-11eb-8b86-12bb97331649.png

(二)擴(kuò)展正則表達(dá)式

擴(kuò)展正則表達(dá)式使用頻率上沒有基本表達(dá)式那么高,但依然很重要,很多情況下沒有擴(kuò)展正則是搞不定的,sed 命令使用擴(kuò)展正則時需要加上選項 -r。

?:表示前置字符有 0 個或 1 個;

+:表示前置字符有 1 個或多個;

|:表示匹配其中的一項即可;

():表示分組,(a|b)b 表示可以匹配 ab 或 bb 子串,且命令表達(dá)式中可以通過 1、2 來表示匹配的變量

{}:和基本正則中的大括號中意義相同,只不過使用時不用加 轉(zhuǎn)義符號;

基本語法先介紹下 sed 的基本語法。

sed [選項] ‘command’ filename

選項部分,常見選項包括:-n、-e、-i、-f、-r 等。

command 子命令格式:

[地址1, 地址2] [函數(shù)] [參數(shù)(標(biāo)記)]

選項簡單說明:

-n,表示安靜模式。默認(rèn) sed 會把每行內(nèi)容處理完畢后打印到屏幕上,加上選項后就不會輸出到屏幕上。

-e,如果需要用 sed 對文本內(nèi)容進(jìn)行多種操作,則需要執(zhí)行多條子命令來進(jìn)行操作;

-i,默認(rèn) sed 只會處理模式空間的副本內(nèi)容,不會直接修改文件,如果需要修改文件,就要指定 -i 選項;

-f,如果命令操作比較多時,用 -e 會有點力不從心,這時需要把多個子命令寫入腳本文件,使用 -f 選項指定執(zhí)行該腳本;

-r:如果需要支持?jǐn)U展正則表達(dá)式,那么需要添加 -r 選項;

數(shù)字定址和正則定址默認(rèn)情況下 sed 會對每一行內(nèi)容進(jìn)行匹配、處理、輸出,有時候我們不需要對所有內(nèi)容進(jìn)行操作,只需要修改一種一部分,比如 1-10 行,偶數(shù)行,或包括 hello 字符串的行。

這種情況下,就需要我們?nèi)ザㄎ惶囟ǖ男衼磉M(jìn)行處理,而不是全部內(nèi)容,這里把定位指定的行叫做 定址。

(一)數(shù)字定址

數(shù)字定址其實就是通過數(shù)字去指定要操作的行,有幾種方式,每種方式都有不同的應(yīng)用場景。

# 只將第4行中hello替換為A

$ sed ‘4s/hello/A/g’ file.txt

# 將第2-4行中hello替換為A

$ sed ‘2,4s/hello/A/g’ file.txt

# 從第2行開始,往下數(shù)4行,也就是2-6行

$ sed ‘2,+4s/hello/A/g’ file.txt

# 將最后1行中hello替換為A

$ sed ‘$s/hello/A/g’ file.txt

# 除了第1行,其它行將hello替換為A

$ sed ‘1!s/hello/A/g’ file.txt

(二)正則定址

正則定址,是通過正則表達(dá)式的匹配來確定需要處理編輯哪些行,其它行就不需要處理

# 將匹配到hello的行執(zhí)行刪除操作,d 表示刪除

$ sed ‘/hello/d’ file.txt

# 刪除空行,“^$” 表示空行

$ sed ‘/^$/d’ file.txt

# 將匹配到以ts開頭的行到以te開頭的行之間所有行進(jìn)行刪除

$ sed ‘/^ts/,/^te/d’ file.txt

(三)數(shù)字定址和正則定址混用

數(shù)字定址和正則定址可以配合使用

# 匹配從第1行到ts開頭的行,把匹配的行執(zhí)行刪除

$ sed ‘1,/^ts/d’ file.txt

基本子命令(一)替換子命令s

子命令 s 為替換子命令,是平時 sed 使用最多的命令,因為支持正則表達(dá)式,功能很強(qiáng)大,基本可以替代 grep 的基本用法。

基本語法:

address]s/pat/rep/flags

替換子命令基本用法

# 將每行的hello替換為HELLO,只替換匹配到的第一個

$ sed ‘s/hello/HELLO/’ file.txt

# 將匹配到的hello全部替換為HELLO,g表示替換一行所有匹配到的

$ sed ‘s/hello/HELLO/g’ file.txt

# 將第2次匹配到的hello替換

$ sed ‘s/hello/A/2’ file.txt

# 將第2次后匹配到的所有都替換

$ sed ‘s/hello/A/2g’ file.txt

# 在行首加#號

$ sed ‘s/^/#/g’ file.txt

# 在行尾加?xùn)|西

$ sed ‘s/$/xxx/g’ file.txt

正則表達(dá)式的簡單使用

# 使用擴(kuò)展正則表達(dá)式,結(jié)果為:A

$ echo “hello 123 world” | sed -r ‘s/[a-z]+ [0-9]+ [a-z]+/A/’

# 《b》This《/b》 is what 《span style=“x”》I《/span》 meant

# 要求:去掉上述html文件中的tags

$ sed ‘s/《[^》]*》//g’ file.txt

多個匹配

# 將1-3行的my替換為your,且3行以后的This替換為That

$ sed ‘1,3s/my/your/g; 3,$s/This/That/g’ my.txt

# 等價于

$ sed -e ‘1,3s/my/your/g’ -e ‘3,$s/This/That/g’ my.txt

使用匹配到的變量

# 將匹配到的字符串前后加雙引號,結(jié)果為:My “name” chopin

# “&”表示匹配到的整個結(jié)果集

$ echo “My name chopin” | sed ‘s/name/“&”/’

# 如下命令,結(jié)果為:hello=world,“1”和“2”表示圓括號匹配到的值

$ echo “hello,123,world” | sed ‘s/([^,]),.*,(.*)/1=2/’

其它幾個常見用法

# 只將修改匹配到行內(nèi)容打印出來,-n關(guān)閉了模式空間的打印模式

$ sed -n ‘s/i/A/p’ file.txt

# 替換是忽略大小寫,將大小寫i替換為A

$ sed -n ‘s/i/A/i’ file.txt

# 將替換后的內(nèi)容另存為一個文件

$ sed -n ‘s/i/A/w b.txt’ file.txt

$ sed -n ‘s/i/A/’ file.txt 》 b.txt

注意,sed 修改匹配到的內(nèi)容后,默認(rèn)行為是不保存到原文件,直接輸出修改后模式空間的內(nèi)容,如果要修改原文件需要指定 -i 選項。

(二)追加行子命令a

子命令 a 表示在指定行下邊插入指定的內(nèi)容行;

# 將所有行下邊都添加一行內(nèi)容A

$ sed ‘a(chǎn) A’ file.txt

# 將文件中1-2行下邊都添加一行內(nèi)容A

$ sed ‘1,2a A’ file.txt

(三)插入行子命令i

子命令 i 和 a 使用基本一樣,只不過是在指定行上邊插入指定的內(nèi)容行

# 將文件中1-2行上邊都添加一行內(nèi)容A

$ sed ‘1,2i A’

(四)替換行子命令c

子命令 c 是表示把指定的行內(nèi)容替換為自己需要的行內(nèi)容

# 將文件所有行都分別替換為A

$ sed ‘c A’ file.txt

# 將文件中1-2行內(nèi)容替換為A,注意:兩行內(nèi)容變成了一行A

$ sed ‘1,2c A’ file.txt

# 將1-2行內(nèi)容分別替換為A行內(nèi)容

$ sed ‘1,2c A

A’ file.txt

(五)刪除行子命令d

子命令 d 表示刪除指定的內(nèi)容行,這個很容理解

# 將文件中1-3行內(nèi)容刪除

$ sed ‘1,3d’ file.txt

# 將文件中This開頭的行內(nèi)容刪除

$ sed ‘/^This/d’ file.txt

(六)設(shè)置行號子命令=

子命令 =,可以將行號打印出來

# 將指定行上邊顯示行號

$ sed ‘1,2=’ file.txt

# 可以將行號設(shè)置在行首

$ sed ‘=’ file.txt | sed ‘N;s/

/ /’

(七)子命令N

子命令 N,把下一行內(nèi)容納入當(dāng)緩存區(qū)做匹配,注意的是第一行的 仍然保留

其實就是當(dāng)前行的下一行內(nèi)容也讀進(jìn)緩存區(qū),一起做匹配和修改,舉個例子吧

# 將偶數(shù)行內(nèi)容合并到奇數(shù)行

$ sed ‘N;s/

//’ file.txt

哈哈,是不是很簡單?

實戰(zhàn)練習(xí)掌握了上邊的基礎(chǔ)命令操作后,基本上可以滿足平時 95% 的需求啦。sed 還有一些高級概念,比如:模式空間、保持空間、高級子命令、分支和測試等,平時使用概率非常小,本文就暫不講解了,有需要的同學(xué)可以私信我一起交流學(xué)習(xí)哈。

學(xué)習(xí)了這么多基礎(chǔ)用法后,只要你勤加練習(xí),多實踐,多使用,一定可以得心應(yīng)手,極大提高的文本處理效率。下邊我簡單再給出一些比較實用的操作實踐,希望對大家有幫助。

1. 刪除文件每行的第二個字符

$ sed -r ‘s/(。)(。)(.*)$/13/’ file.txt

2. 交換每行的第一個字符和第二個字符

$ sed -r ‘s/(。)(。)(.*)/213/’ file.txt

3. 刪除文件中所有的數(shù)字

$ sed ‘s/[0-9]//g’ file.txt

4. 用制表符替換文件中出現(xiàn)的所有空格

$ sed -r ‘s/ +/ /g’ file.txt

5. 把所有大寫字母用括號()括起來

$ sed -r ‘s/([A-Z])/(1)/g’

6. 隔行刪除

$ sed ‘0~2drgilhc’ file.txt

7. 刪除所有空白行

$ sed ‘/^$/d’ file.txt

好了,以上是 sed 命令常用的全部內(nèi)容。想要熟練掌握,只有多實踐,多練習(xí)正則表達(dá)式的使用,一旦熟練掌握后,相信在日后工作中一定會產(chǎn)生巨大作用的。
編輯:lyn

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11509

    瀏覽量

    213751
  • SED
    SED
    +關(guān)注

    關(guān)注

    0

    文章

    26

    瀏覽量

    27332
  • 編輯器
    +關(guān)注

    關(guān)注

    1

    文章

    822

    瀏覽量

    32023

原文標(biāo)題:上古神器 sed 教程詳解,小白也能看得懂

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    如何在Linux配置DNS服務(wù)器

    本文詳細(xì)介紹了如何在Linux配置DNS服務(wù)器,包括DNS工作原理、本地緩存、DNS查詢過程,以及正向和反向查詢的配置。步驟包括服務(wù)器配置、編輯BIND配置文件、添加解析信息和客戶端
    的頭像 發(fā)表于 05-09 13:38 ?1417次閱讀
    如何在<b class='flag-5'>Linux</b><b class='flag-5'>中</b>配置DNS服務(wù)器

    柵極技術(shù)的工作原理和制造工藝

    本文介紹了集成電路制造工藝的柵極的工作原理、材料、工藝,以及先進(jìn)柵極工藝技術(shù)。
    的頭像 發(fā)表于 03-27 16:07 ?835次閱讀
    柵極技術(shù)的<b class='flag-5'>工作原理</b>和制造工藝

    開關(guān)電源的基本工作原理

    ;如果從用 途上來分,還可以分成更多種類。 下面我們先對串聯(lián)式、并聯(lián)式、變壓器式等三種最基本的開關(guān)電源工作原理進(jìn)行簡單介紹,其它種類的開關(guān)電源也將逐步進(jìn)行詳細(xì)分析。 串聯(lián)式開關(guān)電源 串聯(lián)式
    發(fā)表于 03-10 17:01

    變送器的工作原理 變送器在工業(yè)的應(yīng)用

    處理技術(shù),具體工作原理包括但不限于電阻式、電感式、電容式、電渦流式、磁電式、壓電式、光電式、磁彈性式、振頻式等。 在工業(yè)應(yīng)用,變送器通常作為測量系統(tǒng)的重要組成部分,與傳感器緊密配合工作。傳感器負(fù)責(zé)檢測被測物
    的頭像 發(fā)表于 01-31 10:04 ?2631次閱讀

    移動電源的工作原理_移動電源結(jié)構(gòu)

    移動電源的工作原理是將電能存儲在內(nèi)置電池中,然后通過適當(dāng)?shù)碾妷汉碗娏鬏敵觯瑸殡娮釉O(shè)備提供所需的電能。以下是關(guān)于移動電源工作原理的詳細(xì)解釋:
    的頭像 發(fā)表于 01-27 16:11 ?1428次閱讀

    超級電容電池的工作原理

    超級電容電池是一種介于傳統(tǒng)電容器與電池之間的新型儲能裝置。其工作原理主要基于電荷分離和電場存儲,以下是關(guān)于超級電容電池工作原理的詳細(xì)解釋:
    的頭像 發(fā)表于 01-27 11:17 ?1139次閱讀

    Linux三劍客之Sed:文本處理神器

    關(guān)于linux三劍客 grep,過濾關(guān)鍵字信息數(shù)據(jù)。主要是用于查文本內(nèi)的數(shù)據(jù) sed ,對文本數(shù)據(jù)進(jìn)行編輯,修改原文件內(nèi)容 awk,對文件數(shù)據(jù)過濾,提取,并且能實現(xiàn),格式化輸出 awk對文
    的頭像 發(fā)表于 12-16 15:58 ?723次閱讀
    <b class='flag-5'>Linux</b>三劍客之<b class='flag-5'>Sed</b>:文本處理神器

    邏輯異或與異或門的工作原理

    邏輯異或(Exclusive OR,簡稱XOR)與異或門的工作原理是數(shù)字邏輯電路的核心概念。以下是對邏輯異或和異或門工作原理介紹: 一、邏輯異或的定義 邏輯異或是一種邏輯運算,其輸
    的頭像 發(fā)表于 11-19 09:52 ?4043次閱讀

    如何掌握Linux文本處理

    /from/sed_script: 從指定的文本讀取處理腳本 -r: 使用擴(kuò)展正則表達(dá)式 sed命令選項 替換標(biāo)記 g:表示行內(nèi)全面替換 w:表示把行寫入一個文件 x:表示互換模式
    的頭像 發(fā)表于 11-10 13:40 ?499次閱讀

    防爆電機(jī)是什么?它的工作原理是什么?

    介紹工作原理: 防爆電機(jī)的定義和分類 防爆電機(jī)是一種在易燃易爆環(huán)境中使用的電動機(jī),其設(shè)計和制造遵循嚴(yán)格的安全標(biāo)準(zhǔn)。防爆電機(jī)的分類主要有以下幾種: a) 按防爆等級分類:防爆電機(jī)按照防爆等級分為I類、II類和III類。
    的頭像 發(fā)表于 10-25 09:43 ?1645次閱讀

    紅外接收頭工作原理

    紅外接收頭,也被稱為紅外線接收模組(InfraRed Receiver Module,簡稱IRM),是OPIC(OPtical IC)的一種,是光電元件與積體電路(IC)的組合元件。其工作原理主要基于光電效應(yīng)和信號處理技術(shù),以下是關(guān)于紅外接收頭
    的頭像 發(fā)表于 10-21 16:00 ?3424次閱讀

    輔助電源的工作原理

     輔助電源的工作原理主要涉及在主電源發(fā)生故障或不穩(wěn)定時,自動切換到備用電源,以保證設(shè)備的持續(xù)供電。以下是關(guān)于輔助電源工作原理的詳細(xì)解釋:
    的頭像 發(fā)表于 10-21 14:56 ?1255次閱讀

    電動汽車充電樁工作原理介紹

    在當(dāng)前新能源汽車領(lǐng)域的迅速發(fā)展,電動汽車已成為推動綠色交通和減少環(huán)境污染的重要力量。隨著電動汽車數(shù)量的不斷增加,充電樁作為其重要配套設(shè)施,其工作原理和效率成為眾多用戶和行業(yè)關(guān)注的焦點。了解電動汽車
    的頭像 發(fā)表于 09-16 11:37 ?2818次閱讀

    電機(jī)的工作原理和特性是什么

    電機(jī)的工作原理與特點,并探討其在實際應(yīng)用的表現(xiàn)。 一、普通電機(jī)的工作原理 普通電機(jī)的工作原理基于電磁感應(yīng)定律。當(dāng)交流電流流經(jīng)電機(jī)的定子繞組時,產(chǎn)生一個旋轉(zhuǎn)磁場。這個旋轉(zhuǎn)磁場與電機(jī)轉(zhuǎn)子
    的頭像 發(fā)表于 08-23 11:34 ?2875次閱讀

    VCO的工作原理是什么

    VCO(Voltage-Controlled Oscillator,電壓控制振蕩器)的工作原理是基于電子器件的非線性特性,通過改變輸入電壓來調(diào)整輸出信號的頻率。以下是對VCO工作原理的詳細(xì)闡述,包括其電路結(jié)構(gòu)、工作機(jī)制、性能參數(shù)
    的頭像 發(fā)表于 08-20 17:16 ?4422次閱讀