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è)過程。
沖區(qū)中(又稱模式空間,pattern space)。
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)主要包含以下幾種。
[root@localhost ~]# sed -n 'p' test.txt
#輸出所有內(nèi)容,等同于 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
#輸出所有奇數(shù)行,n 表示讀入下一行資料
[root@localhost ~]# sed -n 'n;p' test.txt
#輸出所有偶數(shù)行,n 表示讀入下一行資料
[root@localhost ~]# sed -n '1,5{p;n}' test.txt
#輸出第 1~5 行之間的奇數(shù)行(第 1、3、5 行)
[root@localhost ~]# sed -n '10,${n;p}' test.txt
#輸出第 10 行至文件尾之間的偶數(shù)行
在執(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 的行
[root@localhost ~]# sed -n '4,/the/p' test.txt
#輸出從第 4 行至第一個(gè)包含 the 的行
[root@localhost ~]# sed -n '/the/=' test.txt
#輸出包含the 的行所在的行號(hào),等號(hào)(=)用來輸出行號(hào)
[root@localhost ~]# sed -n '/^PI/p' test.txt
//輸出以PI開頭的行
[root@localhost ~]# sed -n '/[0-9]$/p' test.txt
#輸出以數(shù)字結(jié)尾的行
[root@localhost ~]# sed -n '/\<wood\>/p' test.txt
#輸出包含單詞wood 的行,\<、\>代表單詞邊界
刪除符合條件的文本(d)
因?yàn)楹竺娴氖纠€需要使用測(cè)試文件 test.txt,所以在執(zhí)行刪除操作之前需要先將測(cè)試文件備份。以下示例分別演示了 sed 命令的幾種常用刪除用法。
下面命令中 nl 命令用于計(jì)算文件的行數(shù),結(jié)合該命令可以更加直觀地查看到命令執(zhí)行的結(jié)果。
[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
#刪除以"."結(jié)尾的行
[root@localhost ~]# sed '/^$/d' test.txt
#刪除所有空行
注意: 若是刪除重復(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),常見的用法如下所示。
[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)