亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-06-30 14:01:02 來源:網絡 閱讀:397 作者:wx5d8ab22a0be5a 欄目:系統運維

sed 工具

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

  • 讀取:sed 從輸入流(文件、管道、標準輸入)中讀取一行內容并存儲到臨時的緩

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

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

1.sed 命令常見用法
通常情況下調用 sed 命令有兩種格式,如下所示。其中,“參數”是指操作的目標文件,當存在多個操作對象時用,文件之間用逗號“,”分隔;而 scriptfile 表示腳本文件,需要用“-f”選項指定,當腳本文件出現在目標文件之前時,表示通過指定的腳本文件來處理輸入的目標文件。

sed[選項] '操作' 參數
sed [選項] -f scriptfile 參數

常見的 sed 命令選項主要包含以下幾種。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

shell編程之正則表達式(二)sed工具
刪除符合條件的文本(d)
因為后面的示例還需要使用測試文件 test.txt,所以在執行刪除操作之前需要先將測試文件備份。以下示例分別演示了 sed 命令的幾種常用刪除用法。
下面命令中 nl 命令用于計算文件的行數,結合該命令可以更加直觀地查看到命令執行的結果。

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

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

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

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

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

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

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

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

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

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

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

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

  • sed 's/the/THE/' test.txt //將每行中的第一個the 替換為 THE
  • sed 's/l/L/2' test.txt //將每行中的第 2 個l 替換為L
  • sed 's/the/THE/g' test.txt //將文件中的所有the 替換為THE
  • sed 's/o//g' test.txt //將文件中的所有o 刪除(替換為空串)
  • sed 's/^/#/' test.txt //在每行行首插入#號
  • sed '/the/s/^/#/' test.txt //在包含the 的每行行首插入#號
  • 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,復制到剪貼板;g、G,將剪貼板中的數據覆蓋/追加至指定行;w,保存為文件;r,讀取指定文件;a,追加指定內容。
    sed '/the/{H;d};$G' test.txt //將包含the 的行遷移至文件末尾,{;}用于多個操作sed '1,5{H;d};17G' test.txt //將第 1~5 行內容轉移至第 17 行后
  • sed '/the/w out.file' test.txt //將包含the 的行另存為文件out.file
  • sed '/the/r /etc/hostname' test.txt //將文件/etc/hostname 的內容添加到
    //包含the 的每行以后
  • sed '3aNew' test.txt //在第 3 行后插入一個新行,內容為 New
  • sed '/the/aNew' test.txt //在包含the 的每行后插入一個新行,內容為 New
  • sed '3aNew1\nNew2' test.txt //在第 3 行后插入多行內容,中間的\n 表示換行
    使用腳本編輯文件
    使用 sed 腳本,將多個編輯指令存放到文件中(每行一條編輯指令),通過“-f”選項來調用。例如:
    sed '1,5{H;d};17G' test.txt //將第 1~5 行內容轉移至第 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 直接操作文件示例
    編寫一個腳本,用來調整 vsftpd 服務配置:禁止匿名用戶,但允許本地用戶(也允許寫入)。

    [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"
    #備份原來的配置文件,檢測文件名為/etc/vsftpd/vsftpd.conf.bak 備份文件是否存在, 若不存在則使用 cp 命令進行文件備份
    [ ! -e "$CONFIG.bak" ] && cp $CONFIG $CONFIG.bak # 基于樣本配置進行調整,覆蓋現有文件
    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
    #啟動vsftpd 服務,并設為開機后自動運行systemctl restart vsftpd
    systemctl enable vsftpd
    [root@localhost ~]# chmod +x local_only_ftp.sh
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镇沅| 德格县| 枝江市| 南城县| 金门县| 新安县| 齐河县| 土默特右旗| 辰溪县| 石景山区| 临高县| 都兰县| 民权县| 平乡县| 汝城县| 壶关县| 东海县| 乐安县| 古丈县| 浦北县| 泾川县| 榆中县| 黑龙江省| 武平县| 淮滨县| 高青县| 福州市| 云霄县| 和林格尔县| 萝北县| 伊吾县| 平塘县| 灵宝市| 建昌县| 锡林浩特市| 壶关县| 沅江市| 尚义县| 奉节县| 图们市| 定结县|