您好,登錄后才能下訂單哦!
sed是一種流編輯器,它一次處理一行內(nèi)容。處理時,把當前處理的行存儲在臨時緩沖區(qū)中,稱為“模式空間”(pattern space),接著用sed命令處理緩沖區(qū)中的內(nèi)容,處理完成后,把緩沖區(qū)的內(nèi)容送往屏幕。然后讀入下行,執(zhí)行下一個循環(huán)。如果沒有使諸如‘D’的特殊命令,那會在兩個循環(huán)之間清空模式空間,但不會清空保留空間。這樣不斷重復(fù),直到文件末尾。文件內(nèi)容并沒有改變,除非你使用重定向存儲輸出。
sed的功能:主要用來自動編輯一個或多個文件,簡化對文件的反復(fù)操作,編寫轉(zhuǎn)換程序等
sed基本用法
sed [option]... 'script' inputfile...
sed [選項].. '腳本這個腳本是sed自身的腳本' 處理的文件...
常用選項:
-n 不輸出模式空間內(nèi)容到屏幕,即不自動打印
-e 多點編輯
-f /PATH/SCRIPT_FILE 從指定文件中讀取編輯腳本
-r 支持使用擴展正則表達式
-i.bak 備份文件并原處編輯:直接修改
sed -i.bak(自己定義) '/^root/aadmin';真的修改文件并備份原文件
script:
'地址命令':地址是對文本中的那個部分進行處理,對那些行進行處理如何進行處理就是根據(jù)命令來進行處理的
地址定界:
(1) 不給地址:對全文進行處理
(2) 單地址:
#: 指定的行,$:最后一行
/pattern/:被此處模式所能夠匹配到的每一行
(3) 地址范圍:
#,#
#,+#
/pat1/,/pat2/:只顯示中間的部分內(nèi)容
例如:sed -n '/^ftp/,/^sa/p' /etc/passwd
#,/pat1/
(4) ~:步進
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命令不僅是對文本,還可以把一些命令的標準輸出作為輸入進行處理
比如:ifconfig eth0 | sed -n '2p'
編輯命令:
d 刪除模式空間匹配的行,并立即啟用下一輪循環(huán)(sed '2d' /etc/passwd 第二行不顯示)
p 打印當前模式空間內(nèi)容,追加到默認輸出之后(本身就會打印加上p之后會在打印一次)
a []text 在指定行后面追加文本,支持使用\n實現(xiàn)多行追加
seq 10 | sed 'axxx':每一行追加xxx
還可以添加換行符:seq 10 | sed 'axxx\nttt\nzzz'
還可以添加換行符:seq 10 | sed '2axxx\nttt\nzzz'
第二行進行追加
i []text 在行前面插入文本:添加斜線表示之后的內(nèi)容為添加的內(nèi)容
c []text 替換行為單行或多行文本
w /path/file 保存模式匹配的行至指定文件
r /path/file 讀取指定文件的文本至模式空間中匹配到的行后
sed -n '/^UUID/r /etc/issue' /etc/fstab:讀取文件內(nèi)容
= 為模式空間中的行打印行號
! 模式空間中匹配行取反處理
sed '' /etc/passwd :什么都不跟相當與顯示一下文件
修改selinux中配置文件
sed -i '/^SELINUX=enforcing/cSELINUX=disabled' /etc/selinux/config
禁用SElinux
sed -i ^C/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
s///g:查找替換,分隔符自己指定,可為s@@@,s###
替換標記:g,全局替換;i,忽略大小寫
高級編輯命令
h:把模式空間中的內(nèi)容覆蓋至保持空間
H:把模式空間中的內(nèi)容追加至保持空間
g:把保持空間中的內(nèi)容覆蓋至模式空間
G:把保持空間中的內(nèi)容追加至模式空間
x:把模式空間和保持空間中的內(nèi)容互換
n:覆蓋讀取匹配到的行的下一行至模式空間
N:追加讀取匹配到的行的下一行至模式空間
d:刪除模式空間中的行
D:刪除多行模式空間中的行
在sed語句中強行引用變量
'''var_name''':使用三個’引號在sed語句中可強行引用變量值
例: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' :刪除文件中的空白行,而後為所有非空白行添加一個空白行
seq 1 10 | sed '$!N;$!D' :顯示最后兩行
seq 1 10 | sed 'G' :在原有文件的每行后添加一個空白行
sed練習(xí):
練習(xí):統(tǒng)計/etc/init.d/functions文件中每個單詞出現(xiàn)的次數(shù),并排序(使用grep和sed兩個命令進行實現(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'
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。