您好,登錄后才能下訂單哦!
sed 工具
sed(Stream EDitor)是一個強大而簡單的文本解析轉換工具,可以讀取文本,并根據指定的條件對文本內容進行編輯(刪除、替換、添加、移動等),最后輸出所有行或者僅輸出處理的某些行。sed 也可以在無交互的情況下實現相當復雜的文本處理操作,被廣泛應用于 Shell 腳本中,用以完成各種自動化處理任務。
sed 的工作流程主要包括讀取、執行和顯示三個過程。
沖區中(又稱模式空間,pattern space)。
1.sed 命令常見用法
通常情況下調用 sed 命令有兩種格式,如下所示。其中,“參數”是指操作的目標文件,當存在多個操作對象時用,文件之間用逗號“,”分隔;而 scriptfile 表示腳本文件,需要用“-f”選項指定,當腳本文件出現在目標文件之前時,表示通過指定的腳本文件來處理輸入的目標文件。
sed[選項] '操作' 參數
sed [選項] -f scriptfile 參數
常見的 sed 命令選項主要包含以下幾種。
[root@localhost ~]# sed -n 'p' test.txt
#輸出所有內容,等同于 cat test.txt
[root@localhost ~]# sed -n '3p' test.txt
#輸出第 3 行
[root@localhost ~]# sed -n '3,5p' test.txt
#輸出 3~5 行
[root@localhost ~]# sed -n 'p;n' test.txt
#輸出所有奇數行,n 表示讀入下一行資料
[root@localhost ~]# sed -n 'n;p' test.txt
#輸出所有偶數行,n 表示讀入下一行資料
[root@localhost ~]# sed -n '1,5{p;n}' test.txt
#輸出第 1~5 行之間的奇數行(第 1、3、5 行)
[root@localhost ~]# sed -n '10,${n;p}' test.txt
#輸出第 10 行至文件尾之間的偶數行
在執行“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 的行
[root@localhost ~]# sed -n '4,/the/p' test.txt
#輸出從第 4 行至第一個包含 the 的行
[root@localhost ~]# sed -n '/the/=' test.txt
#輸出包含the 的行所在的行號,等號(=)用來輸出行號
[root@localhost ~]# sed -n '/^PI/p' test.txt
//輸出以PI開頭的行
[root@localhost ~]# sed -n '/[0-9]$/p' test.txt
#輸出以數字結尾的行
[root@localhost ~]# sed -n '/\<wood\>/p' test.txt
#輸出包含單詞wood 的行,\<、\>代表單詞邊界
刪除符合條件的文本(d)
因為后面的示例還需要使用測試文件 test.txt,所以在執行刪除操作之前需要先將測試文件備份。以下示例分別演示了 sed 命令的幾種常用刪除用法。
下面命令中 nl 命令用于計算文件的行數,結合該命令可以更加直觀地查看到命令執行的結果。
[root@localhost ~]# nl test.txt | sed '3d'
#刪除第 3 行
[root@localhost ~]# nl test.txt | sed '3,5d'
#刪除第 3~5 行
[root@localhost ~]# nl test.txt |sed '/the/d'
//刪除包含the 的行,原本the的行被刪除
[root@localhost ~]# sed '/^[a-z]/d' test.txt
#刪除以小寫字母開頭的行
[root@localhost ~]# sed '/\.$/d' test.txt
#刪除以"."結尾的行
[root@localhost ~]# sed '/^$/d' test.txt
#刪除所有空行
注意: 若是刪除重復的空行,即連續的空行只保留一個, 執行“ sed –e ‘/^$/{n;/^$/d}’test.txt”命令即可實現。其效果與“cat -s test.txt”相同,n 表示讀下一行數據。
替換符合條件的文本
在使用 sed 命令進行替換操作時需要用到 s(字符串替換)、c(整行/整塊替換)、y(字符轉換)命令選項,常見的用法如下所示。
[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
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。