sed是一種流編輯器,它一次處理一行內(nèi)容。處理時(shí),把當(dāng)前處理的行存儲(chǔ)在臨時(shí)緩沖區(qū)中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區(qū)中的內(nèi)容,處理完成后,把緩沖區(qū)的內(nèi)容送往屏幕。然后讀入下行,執(zhí)行下一個(gè)循環(huán)。如果沒有使諸如‘D’的特殊命令,那會(huì)在兩個(gè)循環(huán)之間清空模式空間,但不會(huì)清空保留空間。這樣不斷重復(fù),直到文件末尾。文件內(nèi)容并沒有改變,除非你使用重定向存儲(chǔ)輸出。
創(chuàng)新互聯(lián)是一家從事企業(yè)網(wǎng)站建設(shè)、成都做網(wǎng)站、成都網(wǎng)站建設(shè)、行業(yè)門戶網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)制作的專業(yè)網(wǎng)站建設(shè)公司,擁有經(jīng)驗(yàn)豐富的網(wǎng)站建設(shè)工程師和網(wǎng)頁設(shè)計(jì)人員,具備各種規(guī)模與類型網(wǎng)站建設(shè)的實(shí)力,在網(wǎng)站建設(shè)領(lǐng)域樹立了自己獨(dú)特的設(shè)計(jì)風(fēng)格。自公司成立以來曾獨(dú)立設(shè)計(jì)制作的站點(diǎn)1000多家。sed的功能:主要用來自動(dòng)編輯一個(gè)或多個(gè)文件,簡(jiǎn)化對(duì)文件的反復(fù)操作,編寫轉(zhuǎn)換程序等
sed基本用法
sed [option]... 'script' inputfile...
sed [選項(xiàng)].. '腳本這個(gè)腳本是sed自身的腳本' 處理的文件...
常用選項(xiàng):
-n 不輸出模式空間內(nèi)容到屏幕,即不自動(dòng)打印
-e 多點(diǎn)編輯
-f /PATH/SCRIPT_FILE 從指定文件中讀取編輯腳本
-r 支持使用擴(kuò)展正則表達(dá)式
-i.bak 備份文件并原處編輯:直接修改
sed -i.bak(自己定義) '/^root/aadmin';真的修改文件并備份原文件
script:
'地址命令':地址是對(duì)文本中的那個(gè)部分進(jìn)行處理,對(duì)那些行進(jìn)行處理如何進(jìn)行處理就是根據(jù)命令來進(jìn)行處理的
地址定界:
(1) 不給地址:對(duì)全文進(jìn)行處理
(2) 單地址:
#: 指定的行,$:最后一行
/pattern/:被此處模式所能夠匹配到的每一行
(3) 地址范圍:
#,#
#,+#
/pat1/,/pat2/:只顯示中間的部分內(nèi)容
例如:sed -n '/^ftp/,/^sa/p' /etc/passwd
#,/pat1/
(4) ~:步進(jìn)
1~2 奇數(shù)行
seq 10 | sed -n '1~2p'
2~2 偶數(shù)行
seq 10 | sed -n '2~2p'
sed -n '2p' /etc/passwd :只打印第2行
sed命令不僅是對(duì)文本,還可以把一些命令的標(biāo)準(zhǔn)輸出作為輸入進(jìn)行處理
比如:ifconfig eth0 | sed -n '2p'
編輯命令:
d 刪除模式空間匹配的行,并立即啟用下一輪循環(huán)(sed '2d' /etc/passwd 第二行不顯示)
p 打印當(dāng)前模式空間內(nèi)容,追加到默認(rèn)輸出之后(本身就會(huì)打印加上p之后會(huì)在打印一次)
a []text 在指定行后面追加文本,支持使用\n實(shí)現(xiàn)多行追加
seq 10 | sed 'axxx':每一行追加xxx
還可以添加換行符:seq 10 | sed 'axxx\nttt\nzzz'
還可以添加換行符:seq 10 | sed '2axxx\nttt\nzzz'
第二行進(jìn)行追加
i []text 在行前面插入文本:添加斜線表示之后的內(nèi)容為添加的內(nèi)容
c []text 替換行為單行或多行文本
w /path/file 保存模式匹配的行至指定文件
r /path/file 讀取指定文件的文本至模式空間中匹配到的行后
sed -n '/^UUID/r /etc/issue' /etc/fstab:讀取文件內(nèi)容
= 為模式空間中的行打印行號(hào)
! 模式空間中匹配行取反處理
sed '' /etc/passwd :什么都不跟相當(dāng)與顯示一下文件
修改selinux中配置文件
sed -i '/^SELINUX=enforcing/cSELINUX=disabled' /etc/selinux/config
禁用SElinux
sed -i ^C/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
s///g:查找替換,分隔符自己指定,可為s@@@,s###
替換標(biāo)記:g,全局替換;i,忽略大小寫
高級(jí)編輯命令
h:把模式空間中的內(nèi)容覆蓋至保持空間
H:把模式空間中的內(nèi)容追加至保持空間
g:把保持空間中的內(nèi)容覆蓋至模式空間
G:把保持空間中的內(nèi)容追加至模式空間
x:把模式空間和保持空間中的內(nèi)容互換
n:覆蓋讀取匹配到的行的下一行至模式空間
N:追加讀取匹配到的行的下一行至模式空間
d:刪除模式空間中的行
D:刪除多行模式空間中的行
在sed語句中強(qiáng)行引用變量
'''var_name''':使用三個(gè)’引號(hào)在sed語句中可強(qiáng)行引用變量值
例:IP=IP
[root@centos7 test]#ifconfig ens33 | sed -nr 's#.inet (.) net.*#'''$IP''' \1#p'
IP 192.168.0.100
示例:
seq 1 10 | sed -n 'n;p' :取偶數(shù)行
seq 1 10 | sed 'n;d' :取奇數(shù)行
seq 1 10 | sed '1!G;h;$!d' :逆序顯示
seq 1 10 | sed '$!d' :取出最后一行
seq 1 10 | sed '/^$/d;G' :刪除文件中的空白行,而後為所有非空白行添加一個(gè)空白行
seq 1 10 | sed '$!N;$!D' :顯示最后兩行
seq 1 10 | sed 'G' :在原有文件的每行后添加一個(gè)空白行
sed練習(xí):
練習(xí):統(tǒng)計(jì)/etc/init.d/functions文件中每個(gè)單詞出現(xiàn)的次數(shù),并排序(使用grep和sed兩個(gè)命令進(jìn)行實(shí)現(xiàn))
sed -nr 's#[^[:alpha:]]+#\n#gp' /etc/rc.d/init.d/functions | sort |uniq -c |sort -nr
grep -Eo "[[:alpha:]]+" /etc/rc.d/init.d/functions | sort |uniq -c | sort -nr
練習(xí):取出指定網(wǎng)卡的IP地址
ifconfig eth0 |sed -rn '2s/(^.inet )(.)( netmask.*$)/\2/p'
ifconfig eth0|sed -nr '2s/.t (.) net.*/\1/p'
練習(xí):echo /etc/sysconfig/network/ 取出目錄名和基名
目錄名:echo /etc/sysconfig/network/ | sed -nr 's#(./)([^/].)/?$#\1#p'
基名: echo /etc/sysconfig/network/ | sed -nr 's#(./)([^/].)/?$#\2#p'
練習(xí):將文本文件的n和n+1行合并為一行
n為奇數(shù)行:seq 1 10 | sed -n 'N;s#\n##p'
n為偶數(shù)行:seq 1 10 | sed -n '1d;N;s#\n##p'
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。