精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

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

干貨 | Linux 流編輯器 SED 詳解

Linux愛(ài)好者 ? 來(lái)源:YXQ ? 2019-08-09 17:47 ? 次閱讀

一、流編輯器 sed 與命令 sed

Linux 中,常使用流編輯器 sed 進(jìn)行文本替換工作。與常使用的交互式編輯器(如vim)不同,sed 編輯器以批處理的方式來(lái)編輯文件,這比交互式編輯器快得多,可以快速完成對(duì)數(shù)據(jù)的編輯修改。

一般來(lái)說(shuō),sed 編輯器會(huì)執(zhí)行以下操作:

1)一次從輸入中讀取一行數(shù)據(jù);

2)根據(jù)所提供的編輯器命令匹配數(shù)據(jù);

3)按照命令修改流中的數(shù)據(jù);

4)將新的數(shù)據(jù)輸出到 STDOUT。

在 sed 編輯器匹配完一行數(shù)據(jù)后,它會(huì)讀取下一行數(shù)據(jù)并重復(fù)這個(gè)過(guò)程,直到處理完所有數(shù)據(jù)。使用 sed 命令打開(kāi)一個(gè) sed 編輯器。sed 命令的格式如下:

sed[options]edit_commands[file]#[]中的內(nèi)容為可選可不選

其中,options 為命令選項(xiàng),選擇不同的 options 可以修改 sed 命令的行為,主要有 3 個(gè)選項(xiàng):

1)-e 選項(xiàng):在處理輸入時(shí),將 script 中指定的編輯命令添加到已有的命令中。通俗的說(shuō),就是在 sed 后面直接添加編輯命令:

sed-e'edit_commands'[files]

sed 命令在默認(rèn)情況下使用的是 -e 選項(xiàng)。當(dāng)只有一個(gè)編輯命令時(shí),-e 選項(xiàng)可以省略;但是當(dāng)要在一條 sed 語(yǔ)句中執(zhí)行多個(gè)編輯命令時(shí),就需要使用 -e 選項(xiàng)了:

sed-e's/root/ROOT/g;s/bin/BIN/g'/etc/passwd#使用sed同時(shí)執(zhí)行兩條編輯命令(本文大部分用例都直接使用/etc/passwd文件)sed-e's/root/ROOT/g'-e's/bin/BIN/g'/etc/passwd#使用sed同時(shí)執(zhí)行兩條編輯命令

2)-f 選項(xiàng):在處理輸入時(shí),將 file 中指定的編輯命令添加到已有的命令中:

前面提到,在需要同時(shí)執(zhí)行多條編輯命令時(shí),可以使用 -e 選項(xiàng)。但是當(dāng)所需要執(zhí)行的編輯命令數(shù)量很多時(shí),每次使用 sed 時(shí)一行一行地敲顯然不是很方便,這時(shí)可以將所用到的 sed 編輯命令寫(xiě)入一個(gè)文件,然后使用 sed -f 選項(xiàng)來(lái)指定讀取該文件:

$catscript.sed$s/root/ROOT/$s/bin/BIN/$s/home/HOME/
sed-fscript.sed/etc/passwd

3)-n 選項(xiàng):不產(chǎn)生命令輸入:

sed-n's/root/ROOT/'/etc/passwd

使用 -n 選項(xiàng)不會(huì)將流編輯器的內(nèi)容輸出到 STDOUT,通常將 -n 選項(xiàng)與 p 命令結(jié)合起來(lái)使用,以只打印被匹配的行。

除了這三個(gè)選項(xiàng)外,sed 編輯器還提供了許多命令,用來(lái)進(jìn)行更詳細(xì)的操作,簡(jiǎn)單列一下,后面再仔細(xì)介紹:

命令 描述
s 文本替換操作
d 刪除操作
i 插入操作
a 附加操作
c 將一行文本修改為新的行
y 逐字符替換
p 打印文本行
= 打印行號(hào)
w 向文件中寫(xiě)入數(shù)據(jù)
r 從文件中讀取數(shù)據(jù)

二、使用 sed 命令進(jìn)行文本替換

sed 使用 s 命令來(lái)進(jìn)行文本替換操作,基本格式如下:

sed's/srcStr/dstStr/'file

其中,srcStr 為想要替換的文本,dstStr 為將要替換成的文本。使用 s 命令時(shí),sed 編輯器會(huì)在一行一行地讀取文件 file,并在每行查找文本 srcStr,如果找到了,則將該處的 srcStr 替換為 dstStr。

/ 字符為界定符,用于分隔字符串(sed 編輯器允許使用其他字符作為替換命令中的字符串分隔符):

sed's!/bin/bash!/BIN/BASH!'/etc/passwd#使用!作為字符串分隔符

默認(rèn)情況下,替換命令只會(huì)替換掉目標(biāo)文本在每行中第一次出現(xiàn)的地方。若想要替換掉每行中所有匹配的地方,可以使用替換標(biāo)記 g。替換標(biāo)記放在編輯命令的末尾。除了 g 外,還有幾種替換標(biāo)記:

1)數(shù)字:指明替換掉第幾次匹配到的文本,沒(méi)有設(shè)置這個(gè)標(biāo)記時(shí),默認(rèn)是替換第一次匹配的文本:

sed's/root/ROOT/2'/etc/passwd

這行命令將 /etc/passwd 文件中每行的第 2 個(gè) root 替換為 ROOT;

2)g:替換所有匹配到的文本:

sed's/root/ROOT/g'/etc/passwd

這行命令將 /etc/passwd 文件中的 root,全部替換為 ROOT;

3)p:打印與替換命令中指定模式(srcStr)相匹配的行:

sed's/root/ROOT/p'/etc/passwd

執(zhí)行這命令,會(huì)在 STDOUT 上看到包含有 root 的行被輸出了兩次,一次是 sed 編輯器自動(dòng)輸出的;另一次則是 p 標(biāo)記打印出來(lái)的匹配行。

單獨(dú)地使用 p 標(biāo)記沒(méi)什么用處,通常將 p 標(biāo)記和 -n 選項(xiàng)結(jié)合起來(lái)使用,這樣就可以只輸出被匹配替換過(guò)的行了:

ed-n's/root/ROOT/gp'/etc/passwd#將/etc/passwd中所有的root都替換成ROOT,并輸出被修改的行

注:可以使用 " = " 命令來(lái)打印行號(hào),用法與 p 一樣。

4)w file:將替換的結(jié)果寫(xiě)到文件中,不過(guò)只保存被修改的行,與 -n + p 的功能類(lèi)似:

sed-n's/root/ROOT/gwchange.txt'/etc/passwd#將/etc/passwd中所有的root都替換成ROOT,并將被修改的行保存到文件change.txt中去

三、使用行尋址對(duì)特定行進(jìn)行編輯

默認(rèn)情況下,sed 編輯器會(huì)對(duì)文件中的所有行進(jìn)行編輯。當(dāng)然,也可以只指定特定的某些行號(hào),或者行范圍來(lái)進(jìn)行流編輯,這需要用到行尋址。所指定的行地址放在編輯命令之前:

[address]commands

3.1 使用數(shù)字方式進(jìn)行行尋址

sed 編輯器將文本流中的每一行都進(jìn)行編號(hào),第一行的編號(hào)為 1 ,后面的按順序分配行號(hào)。通過(guò)指定特定的行號(hào),可以選擇編輯特定的行。舉幾個(gè)例子:

sed'3s/bin/BIN/g'/etc/passwd#將第3行中所有的bin替換成BINsed'2,5s/bin/BIN/g'/etc/passwd#將第2到5行中所有的bin替換成BINsed'10,$s/bin/BIN/g'/etc/passwd#將第10行到最后一行中所有的bin替換成BIN

注:行尋址不止對(duì)替換命令有效,對(duì)其他命令也都是有效的,后面也會(huì)用到。

3.2 使用文本模式過(guò)濾器過(guò)濾行

sed 編輯器允許指定文本模式來(lái)過(guò)濾出命令要作用的行,格式如下:

/pattern/command

必須使用斜杠符 " / " 將要指定的文本模式 pattern 包含起來(lái)。sed 編輯器會(huì)尋找匹配文本模式的行,然后對(duì)這些行執(zhí)行編輯命令:

sed-n'/root/s/bin/BIN/p'/etc/passwd#尋找包含有字符串root的行,并將匹配行的bin替換為BIN

與數(shù)字尋址一樣,也可以使用文本過(guò)濾區(qū)間來(lái)過(guò)濾行:

sed'/pattern1/,/pattern2/edit_command'file

這行命令會(huì)在文件 file 中先尋找匹配 pattern1 的行,然后從該行開(kāi)始,執(zhí)行編輯命令,直到找到匹配 pattern2 的行。但是需要注意的是,使用文本區(qū)間過(guò)濾文本時(shí),只要匹配到了開(kāi)始模式(pattern1),編輯命令就會(huì)開(kāi)始執(zhí)行,直到匹配到結(jié)束模式(pattern2),這會(huì)導(dǎo)致一種情況:一個(gè)文本中,先匹配到了一對(duì) pattern1、pattern2,對(duì)該文本區(qū)間中的文本執(zhí)行了編輯命令;然后,在 pattern2 之后又匹配到了 pattern1,這時(shí)就會(huì)再次開(kāi)始執(zhí)行編輯命令,因此,在使用文本區(qū)間過(guò)濾時(shí)要格外小心。舉個(gè)例子:

sed-n'/root/,/nologin/s/bin/BIN/p'/etc/passwd

這行命令對(duì) /etc/passwd 進(jìn)行了兩次文本區(qū)間匹配,結(jié)果如下:

四、使用 sed 命令刪除行

sed 編輯器使用 d 命令來(lái)刪除文本流中的特定行。使用 d 命令時(shí),一般需要帶上位尋址,以刪除指定的行,否則默認(rèn)會(huì)刪除所有文本行:

sed'/root/d'/etc/passwd#刪除匹配root的行sed'2,$d'/etc/passwd#刪除第2到最后一行

五、使用 sed 命令插入和附加文本

sed 編輯器使用 i 命令來(lái)向數(shù)據(jù)流中插入文本行,使用 a 命令來(lái)向數(shù)據(jù)流中附加文本行。其中:i 命令會(huì)在指定行前增加一個(gè)新行;a 命令會(huì)在指定行后增加一個(gè)新行。

需要注意的是,這兩個(gè)命令都不能在單個(gè)命令行上使用(即不是用來(lái)在一行中插入或附加一段文本的),只能指定插入還是附加到另一行。命令格式如下:

sed'[address][i|a]\newline'file

newline 中的文本即為將要插入或附加在一行前面或后面的文本。常常使用這兩個(gè)命令結(jié)合行尋址在特定的行前面或后面增加一個(gè)新行。舉個(gè)例子:

sed'i\Insertalinebehindeveryline'/etc/passwd#向數(shù)據(jù)流的每一行前面增加一個(gè)新行,新行的內(nèi)容為\后面的內(nèi)容sed'1i\Insertalinebehindthefirstline'/etc/passwd#在數(shù)據(jù)流的第一行前面增加一個(gè)新行sed'3a\Appendalineafterthethirdline'/etc/passwd#在數(shù)據(jù)流的第三行后面增加一個(gè)新行sed'$a\Appendalineinthelastline'/etc/passwd#在數(shù)據(jù)流的最后一行后面增加一個(gè)新行

六、使用 sed 命令修改行

使用命令 c 可以將數(shù)據(jù)流中的整行文本修改為新的行,與插入、附加操作一樣,這要求在 sed 命令中指定新的行,格式如下:

sed'[address][c]\newtext'file

newtext 中的文本為匹配行將要被修改成的文本。

sed'3c\Newtext'/etc/passwd#將數(shù)據(jù)流中第三行的內(nèi)容修改為\后面的內(nèi)容sed'/root/c\Newtext'/etc/passwd#將匹配到root的行的內(nèi)容修改為\后面的內(nèi)容sed'2,4c\Newtext'/etc/passwd#將第2到4行的內(nèi)容修改為\后面的內(nèi)容,但是不是逐行修改,而是會(huì)將這之間的3行用一行文本來(lái)替代

注意這里對(duì)地址區(qū)間使用 c 命令進(jìn)行修改時(shí),不會(huì)逐行修改,而是會(huì)將整個(gè)區(qū)間用一行修改文本替代。

七、使用 sed 命令逐字符轉(zhuǎn)換

使用 y 參數(shù)可以按要求對(duì)文本進(jìn)行逐字符轉(zhuǎn)換。格式如下:

[address]y/inchars/outchars/

轉(zhuǎn)換命令會(huì)對(duì) inchars 和 outchars 的值進(jìn)行一對(duì)一的映射。inchars 中的第一個(gè)字符會(huì)被轉(zhuǎn)換成 outchars 中的第一個(gè)字符;inchars 中的第二個(gè)字符會(huì)被轉(zhuǎn)換成 outchars 中的第二個(gè)字符;... 直到處理完一行。如果 inchars 和 outchars 的長(zhǎng)度不同,則 sed 編輯器會(huì)產(chǎn)生一個(gè)錯(cuò)誤消息。舉個(gè)例子:

echoabcdefggfedcba|sed'y/acg/ACG/'

輸出結(jié)果為 AbCdefGGfedCbA。

八、使用 sed 命令處理文件

8.1 向文件中寫(xiě)入數(shù)據(jù)

前面已經(jīng)提到過(guò),可以使用 w 命令向文件寫(xiě)入行。格式如下:

[address]wfilename

舉個(gè)例子:

sed'1,2wtest.txt'/etc/passwd

該語(yǔ)句將數(shù)據(jù)流的第 1、2 行寫(xiě)入文件 test.txt 中去。

8.2 從文件中讀取數(shù)據(jù)

可以使用 r 命令來(lái)將一個(gè)文本中的數(shù)據(jù)插入到數(shù)據(jù)流中去,與普通的插入命令 i 類(lèi)似,這也是對(duì)行進(jìn)行操作的,命令格式如下:

[address]rfilename

filename 為要插入的文件。r 命令常結(jié)合行尋址使用,以將文本插入到指定的行后面。舉個(gè)例子:

sed'3rtest.txt'/etc/passwd

這句話將文件 test.txt 中的內(nèi)容插入到數(shù)據(jù)流第三行后面去。

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

    關(guān)注

    87

    文章

    11232

    瀏覽量

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

    關(guān)注

    0

    文章

    24

    瀏覽量

    27068

原文標(biāo)題:Linux 流編輯器 sed 詳解

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

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    linux中vi、vim編輯器常用的技巧

    今天浩道跟大家分享硬核干貨,關(guān)于linux中vi、vim編輯器常用的技巧!
    發(fā)表于 09-21 14:04 ?584次閱讀

    如何在Linux上更改默認(rèn)的crontab編輯器

    在基于 Linux 和 Unix 的系統(tǒng)上,crontab 命令可幫助您安排任務(wù),以便它們可以在指定的時(shí)間或間隔在后臺(tái)自動(dòng)運(yùn)行。 首次啟動(dòng) crontab 時(shí),您將看到一個(gè)提示,要求您選擇用于編輯 crontab 文件的默認(rèn)文本編輯器
    發(fā)表于 12-26 11:23 ?6577次閱讀

    嵌入式Linux入門(mén)(四、Linux下的編輯器—讓人愛(ài)恨交加的vi)

    嵌入式 Linux入 門(mén)第四課,了解 Linux 下的編輯器,掌握 vi 編輯器的使用。
    的頭像 發(fā)表于 07-04 11:42 ?1515次閱讀
    嵌入式<b class='flag-5'>Linux</b>入門(mén)(四、<b class='flag-5'>Linux</b>下的<b class='flag-5'>編輯器</b>—讓人愛(ài)恨交加的vi)

    常用編輯器之Vim編輯器

    Linux下我們對(duì)文本進(jìn)行編輯,經(jīng)常用到的編輯器就是Vi/Vim,Vi/Vim命令眾多,功能強(qiáng)大,是大多數(shù)Linux程序員選擇使用的編輯器
    發(fā)表于 08-22 09:48

    快速理解linux編輯器sed命令

    編輯器,默認(rèn)情況下,sed并不會(huì)改變?cè)募旧恚皇菍?duì)文本流進(jìn)行修改,并將修改后的結(jié)果打印到標(biāo)準(zhǔn)輸出中與awk命令一樣,sed處理文本時(shí)也是以行為單位,每處理完一行就立即打印出來(lái),然后再處理下一行,直至
    發(fā)表于 11-30 10:44

    linux文本編輯器工具下載

    linux文本編輯工具:VIM是優(yōu)秀的開(kāi)源文本編輯器,是Linux/UNIX用戶非常常用的文本編輯工具.
    發(fā)表于 06-02 22:30 ?31次下載

    CentOS下vi編輯器用法大全

    vi編輯器是所有Unix及Linux系統(tǒng)下標(biāo)準(zhǔn)的編輯器,它的強(qiáng)大不遜色于任何最新的文本編輯器,這里只是簡(jiǎn)單地介紹一下它的用法和一小部分指令。由于對(duì)Unix及
    發(fā)表于 05-19 15:16 ?2次下載

    Linux下C編程基礎(chǔ)之常用編輯器淺析

    3.2 常用編輯器 3.2.1 進(jìn)入vi Linux系統(tǒng)提供了一個(gè)完整的編輯器家族系列,如Ed、Ex、vi和emacs等。按功能它們可以分為兩大類(lèi):行編輯器(Ed、Ex)和全屏幕
    發(fā)表于 10-18 15:45 ?0次下載
    <b class='flag-5'>Linux</b>下C編程基礎(chǔ)之常用<b class='flag-5'>編輯器</b>淺析

    linux系統(tǒng)教程之Vi編輯器的使用教程免費(fèi)下載

    用戶無(wú)論是建立文本文件,還是編寫(xiě)程序、配置系統(tǒng)環(huán)境,都要用到文本編輯器Linux操作系統(tǒng)環(huán)境下提供了許多文本編輯器,本章重點(diǎn)講解vi編輯器,啟動(dòng)、保存、退出和其工作模式等內(nèi)容,并對(duì)利
    發(fā)表于 12-18 19:09 ?52次下載
    <b class='flag-5'>linux</b>系統(tǒng)教程之Vi<b class='flag-5'>編輯器</b>的使用教程免費(fèi)下載

    如何從Linux中探討Ⅵ編輯器的教學(xué)問(wèn)題

    Linux中文本編輯器訪的主要教學(xué)方法和常見(jiàn)的教學(xué)問(wèn)題兩個(gè)方面,探討了Ⅵ編輯器的教學(xué)問(wèn)題。
    發(fā)表于 01-18 15:07 ?9次下載
    如何從<b class='flag-5'>Linux</b>中探討Ⅵ<b class='flag-5'>編輯器</b>的教學(xué)問(wèn)題

    基于終端的Linux 編輯器

    我們需要利用文本編輯器來(lái)做筆記、寫(xiě)程序,或者編輯系統(tǒng)配置文件來(lái)完成一些事情。
    的頭像 發(fā)表于 03-30 17:42 ?3019次閱讀

    你會(huì)使用 Linux 編輯器 vim 嗎?

    vim:是一款編輯器,只負(fù)責(zé)寫(xiě)代碼;相當(dāng)于 windows 的記事本;
    的頭像 發(fā)表于 05-10 18:21 ?832次閱讀
    你會(huì)使用 <b class='flag-5'>Linux</b> <b class='flag-5'>編輯器</b> vim 嗎?

    sed用得少?sed常用語(yǔ)法簡(jiǎn)介

    sed簡(jiǎn)稱編輯器,即stream editor的縮寫(xiě)。sed是一個(gè)操作、過(guò)濾和轉(zhuǎn)換文本內(nèi)容的強(qiáng)大工具。
    的頭像 發(fā)表于 12-18 09:14 ?2020次閱讀

    Zed Code編輯器新增Linux支持

    據(jù)悉,Zed代碼編輯器是基于Rust語(yǔ)言開(kāi)發(fā)的macOS軟件,近期其研發(fā)團(tuán)隊(duì)宣布已成功實(shí)現(xiàn)Linux平臺(tái)兼容。據(jù)悉,今年年初Zed首次發(fā)布時(shí)并未提供Linux版支持。
    的頭像 發(fā)表于 05-10 10:31 ?537次閱讀

    vim編輯器如何使用

    Vim編輯器是一個(gè)功能強(qiáng)大的文本編輯器,它基于Vi進(jìn)行改進(jìn),并增加了許多新特性。Vim編輯器的使用主要涉及其不同的工作模式及相應(yīng)操作。以下是Vim編輯器的基本使用方法: 一、Vim
    的頭像 發(fā)表于 08-30 14:58 ?379次閱讀