成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

shell編程之正則表達(dá)式(二)sed工具

sed 工具

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序定制開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了阿拉善盟免費(fèi)建站歡迎大家使用!

sed(Stream EDitor)是一個(gè)強(qiáng)大而簡(jiǎn)單的文本解析轉(zhuǎn)換工具,可以讀取文本,并根據(jù)指定的條件對(duì)文本內(nèi)容進(jìn)行編輯(刪除、替換、添加、移動(dòng)等),最后輸出所有行或者僅輸出處理的某些行。sed 也可以在無交互的情況下實(shí)現(xiàn)相當(dāng)復(fù)雜的文本處理操作,被廣泛應(yīng)用于 Shell 腳本中,用以完成各種自動(dòng)化處理任務(wù)。
sed 的工作流程主要包括讀取、執(zhí)行和顯示三個(gè)過程。

  • 讀?。簊ed 從輸入流(文件、管道、標(biāo)準(zhǔn)輸入)中讀取一行內(nèi)容并存儲(chǔ)到臨時(shí)的緩

沖區(qū)中(又稱模式空間,pattern space)。

  • 執(zhí)行:默認(rèn)情況下,所有的 sed 命令都在模式空間中順序地執(zhí)行,除非指定了行的地址,否則 sed 命令將會(huì)在所有的行上依次執(zhí)行。
  • 顯示:發(fā)送修改后的內(nèi)容到輸出流。再發(fā)送數(shù)據(jù)后,模式空間將會(huì)被清空。
    在所有的文件內(nèi)容都被處理完成之前,上述過程將重復(fù)執(zhí)行,直至所有內(nèi)容被處理完。
    注意:默認(rèn)情況下,所有的 sed 命令都是在模式空間內(nèi)執(zhí)行的,因此輸入的文件并不會(huì)發(fā)生任何變化,除非是用重定向存儲(chǔ)輸出。

1.sed 命令常見用法
通常情況下調(diào)用 sed 命令有兩種格式,如下所示。其中,“參數(shù)”是指操作的目標(biāo)文件,當(dāng)存在多個(gè)操作對(duì)象時(shí)用,文件之間用逗號(hào)“,”分隔;而 scriptfile 表示腳本文件,需要用“-f”選項(xiàng)指定,當(dāng)腳本文件出現(xiàn)在目標(biāo)文件之前時(shí),表示通過指定的腳本文件來處理輸入的目標(biāo)文件。

sed[選項(xiàng)] '操作' 參數(shù)
sed [選項(xiàng)] -f scriptfile 參數(shù)

常見的 sed 命令選項(xiàng)主要包含以下幾種。

  • -e 或--expression=:表示用指定命令或者腳本來處理輸入的文本文件。
  • -f 或--file=:表示用指定的腳本文件來處理輸入的文本文件。
  • -h 或--help:顯示幫助。
  • -n、--quiet 或 silent:表示僅顯示處理后的結(jié)果。
  • -i:直接編輯文本文件。
    “操作”用于指定對(duì)文件操作的動(dòng)作行為,也就是 sed 的命令。通常情況下是采用的“[n1[,n2]]”操作參數(shù)的格式。n1、n2 是可選的,不一定會(huì)存在,代表選擇進(jìn)行操作的行數(shù),如操作需要在 5~20 行之間進(jìn)行,則表示為“5,20 動(dòng)作行為”。常見的操作包括以下幾種。
  • a:增加,在當(dāng)前行下面增加一行指定內(nèi)容。
  • c:替換,將選定行替換為指定內(nèi)容。
  • d:刪除,刪除選定的行。
  • i:插入,在選定行上面插入一行指定內(nèi)容。
  • p:打印,如果同時(shí)指定行,表示打印指定行;如果不指定行,則表示打印所有內(nèi)容;如果有非打印字符,則以 ASCII 碼輸出。其通常與“-n”選項(xiàng)一起使用。
  • s:替換,替換指定字符。
  • y:字符轉(zhuǎn)換。
    用法實(shí)例:
    輸出符合條件的文本(p 表示正常輸出)
    [root@localhost ~]# sed -n 'p' test.txt
    #輸出所有內(nèi)容,等同于 cat test.txt

    shell編程之正則表達(dá)式(二)sed工具

    [root@localhost ~]# sed -n '3p' test.txt    
    #輸出第 3 行

    shell編程之正則表達(dá)式(二)sed工具

    [root@localhost ~]# sed -n '3,5p' test.txt 
    #輸出 3~5 行

    shell編程之正則表達(dá)式(二)sed工具

    [root@localhost ~]# sed -n 'p;n' test.txt
    #輸出所有奇數(shù)行,n 表示讀入下一行資料

    shell編程之正則表達(dá)式(二)sed工具

    [root@localhost ~]# sed -n 'n;p' test.txt
    #輸出所有偶數(shù)行,n 表示讀入下一行資料

    shell編程之正則表達(dá)式(二)sed工具

    [root@localhost ~]# sed -n '1,5{p;n}' test.txt
    #輸出第 1~5 行之間的奇數(shù)行(第 1、3、5 行)

    shell編程之正則表達(dá)式(二)sed工具

    [root@localhost ~]# sed -n '10,${n;p}' test.txt
    #輸出第 10 行至文件尾之間的偶數(shù)行

    shell編程之正則表達(dá)式(二)sed工具
    在執(zhí)行“sed –n‘10,${n;p}’test.txt”命令時(shí),讀取的第 1 行是文件的第 10 行,
    讀取的第 2 行是文件的第 11 行,依此類推,所以輸出的偶數(shù)行是文件的第 11 行、13 行直至文件結(jié)尾,其中包括空行。

以上是 sed 命令的基本用法,sed 命令結(jié)合正則表達(dá)式時(shí),格式略有不同,正則表達(dá)式以“/”包圍。例如,以下操作是 sed 命令與正則表達(dá)式結(jié)合使用的示例。

[root@localhost ~]# sed -n '/the/p' test.txt    
#輸出包含the 的行

shell編程之正則表達(dá)式(二)sed工具

[root@localhost ~]# sed -n '4,/the/p' test.txt
#輸出從第 4 行至第一個(gè)包含 the 的行

shell編程之正則表達(dá)式(二)sed工具

[root@localhost ~]# sed -n '/the/=' test.txt
#輸出包含the 的行所在的行號(hào),等號(hào)(=)用來輸出行號(hào)

shell編程之正則表達(dá)式(二)sed工具

[root@localhost ~]# sed -n '/^PI/p' test.txt    
//輸出以PI開頭的行

shell編程之正則表達(dá)式(二)sed工具

[root@localhost ~]# sed -n '/[0-9]$/p' test.txt 
#輸出以數(shù)字結(jié)尾的行

shell編程之正則表達(dá)式(二)sed工具

[root@localhost ~]# sed -n '/\<wood\>/p' test.txt
#輸出包含單詞wood 的行,\<、\>代表單詞邊界

shell編程之正則表達(dá)式(二)sed工具
刪除符合條件的文本(d)
因?yàn)楹竺娴氖纠€需要使用測(cè)試文件 test.txt,所以在執(zhí)行刪除操作之前需要先將測(cè)試文件備份。以下示例分別演示了 sed 命令的幾種常用刪除用法。
下面命令中 nl 命令用于計(jì)算文件的行數(shù),結(jié)合該命令可以更加直觀地查看到命令執(zhí)行的結(jié)果。

[root@localhost ~]# nl test.txt | sed '3d'  
#刪除第 3 行

shell編程之正則表達(dá)式(二)sed工具

[root@localhost ~]# nl test.txt | sed '3,5d'    
#刪除第 3~5 行

shell編程之正則表達(dá)式(二)sed工具

[root@localhost ~]# nl test.txt |sed '/the/d'
//刪除包含the 的行,原本the的行被刪除

shell編程之正則表達(dá)式(二)sed工具

[root@localhost ~]# sed '/^[a-z]/d' test.txt    
#刪除以小寫字母開頭的行

shell編程之正則表達(dá)式(二)sed工具

[root@localhost ~]# sed '/\.$/d' test.txt   
#刪除以"."結(jié)尾的行

shell編程之正則表達(dá)式(二)sed工具

[root@localhost ~]# sed '/^$/d' test.txt    
#刪除所有空行

shell編程之正則表達(dá)式(二)sed工具
注意: 若是刪除重復(fù)的空行,即連續(xù)的空行只保留一個(gè), 執(zhí)行“ sed –e ‘/^$/{n;/^$/d}’test.txt”命令即可實(shí)現(xiàn)。其效果與“cat -s test.txt”相同,n 表示讀下一行數(shù)據(jù)。
替換符合條件的文本
在使用 sed 命令進(jìn)行替換操作時(shí)需要用到 s(字符串替換)、c(整行/整塊替換)、y(字符轉(zhuǎn)換)命令選項(xiàng),常見的用法如下所示。

  • sed 's/the/THE/' test.txt //將每行中的第一個(gè)the 替換為 THE
  • sed 's/l/L/2' test.txt //將每行中的第 2 個(gè)l 替換為L(zhǎng)
  • sed 's/the/THE/g' test.txt //將文件中的所有the 替換為THE
  • sed 's/o//g' test.txt //將文件中的所有o 刪除(替換為空串)
  • sed 's/^/#/' test.txt //在每行行首插入#號(hào)
  • sed '/the/s/^/#/' test.txt //在包含the 的每行行首插入#號(hào)
  • sed 's/$/EOF/' test.txt //在每行行尾插入字符串EOF
  • sed '3,5s/the/THE/g' test.txt //將第 3~5 行中的所有the 替換為 THE
  • sed '/the/s/o/O/g' test.txt //將包含the 的所有行中的o 都替換為 O
    遷移符合條件的文本
    其中,H,復(fù)制到剪貼板;g、G,將剪貼板中的數(shù)據(jù)覆蓋/追加至指定行;w,保存為文件;r,讀取指定文件;a,追加指定內(nèi)容。
    sed '/the/{H;d};$G' test.txt //將包含the 的行遷移至文件末尾,{;}用于多個(gè)操作sed '1,5{H;d};17G' test.txt //將第 1~5 行內(nèi)容轉(zhuǎn)移至第 17 行后
  • sed '/the/w out.file' test.txt //將包含the 的行另存為文件out.file
  • sed '/the/r /etc/hostname' test.txt //將文件/etc/hostname 的內(nèi)容添加到
    //包含the 的每行以后
  • sed '3aNew' test.txt //在第 3 行后插入一個(gè)新行,內(nèi)容為 New
  • sed '/the/aNew' test.txt //在包含the 的每行后插入一個(gè)新行,內(nèi)容為 New
  • sed '3aNew1\nNew2' test.txt //在第 3 行后插入多行內(nèi)容,中間的\n 表示換行
    使用腳本編輯文件
    使用 sed 腳本,將多個(gè)編輯指令存放到文件中(每行一條編輯指令),通過“-f”選項(xiàng)來調(diào)用。例如:
    sed '1,5{H;d};17G' test.txt //將第 1~5 行內(nèi)容轉(zhuǎn)移至第 17 行后
    以上操作可以改用腳本文件方式:
    [root@localhost ~]# vi opt.list 1,5H
    1,5d
    17G
    [root@localhost ~]# sed -f opt.list test.txt
    The year ahead will test our political establishment to the limit.
    PI=3.141592653589793238462643383249901429
    a wood cross!
    Actions speak louder than words
    #woood # #woooooood # AxyzxyzxyzxyzC
    I bet this place is really spooky late at night! Misfortunes never come alone/single.
    I shouldn't have lett so tast.
    he was short and fat.
    He was wearing a blue polo shirt with black pants. The home of Football on BBC Sport online.
    the tongue is boneless but it breaks bones.12! google is the best tools for search keyword.

    6)sed 直接操作文件示例
    編寫一個(gè)腳本,用來調(diào)整 vsftpd 服務(wù)配置:禁止匿名用戶,但允許本地用戶(也允許寫入)。

    [root@localhost ~]# vim local_only_ftp.sh #!/bin/bash
    #指定樣本文件路徑、配置文件路徑
    SAMPLE="/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf " CONFIG="/etc/vsftpd/vsftpd.conf"
    #備份原來的配置文件,檢測(cè)文件名為/etc/vsftpd/vsftpd.conf.bak 備份文件是否存在, 若不存在則使用 cp 命令進(jìn)行文件備份
    [ ! -e "$CONFIG.bak" ] && cp $CONFIG $CONFIG.bak # 基于樣本配置進(jìn)行調(diào)整,覆蓋現(xiàn)有文件
    sed -e '/^anonymous_enable/s/YES/NO/g' $SAMPLE > $CONFIG
    sed -i -e '/^local_enable/s/NO/YES/g' -e '/^write_enable/s/NO/YES/g' $CONFIG grep "listen" $CONFIG || sed -i '$alisten=YES' $CONFIG
    #啟動(dòng)vsftpd 服務(wù),并設(shè)為開機(jī)后自動(dòng)運(yùn)行systemctl restart vsftpd
    systemctl enable vsftpd
    [root@localhost ~]# chmod +x local_only_ftp.sh

分享文章:shell編程之正則表達(dá)式(二)sed工具
地址分享:http://jinyejixie.com/article14/ppehge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站維護(hù)、App開發(fā)、云服務(wù)器、網(wǎng)頁設(shè)計(jì)公司、、App設(shè)計(jì)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
虞城县| 皮山县| 清新县| 彰化市| 内丘县| 阿克| 仙游县| 全州县| 林周县| 平遥县| 尉犁县| 德格县| 宁陵县| 土默特右旗| 上栗县| 板桥市| 永泰县| 道孚县| 新巴尔虎右旗| 齐齐哈尔市| 临汾市| 泾阳县| 遂溪县| 宝清县| 阳朔县| 汶川县| 甘洛县| 云南省| 石河子市| 沾化县| 资阳市| 武清区| 固安县| 视频| 襄汾县| 芷江| 石家庄市| 乐东| 海兴县| 东乡族自治县| 宁南县|