1拣宰、用法
sed[option]... 'script' inputfile...
?常用選項(xiàng):
-n:不輸出模式空間內(nèi)容到屏幕,即不自動(dòng)打印
-e: 多點(diǎn)編輯
-f:/PATH/SCRIPT_FILE: 從指定文件中讀取編輯腳本
-r: 支持使用擴(kuò)展正則表達(dá)式
-i.bak: 備份文件并原處編輯
?script:
'地址命令'
2践美、地址定界
地址定界:
(1) 不給地址:對全文進(jìn)行處理
(2) 單地址:
#: 指定的行
/pattern/:被此處模式所能夠匹配到的每一行
(3) 地址范圍:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
(4) ~:步進(jìn)
1~2 奇數(shù)行
2~2 偶數(shù)行
3、編輯命令
d: 刪除模式空間匹配的行,并立即啟用下一輪循環(huán)
p:打印當(dāng)前模式空間內(nèi)容硝皂,追加到默認(rèn)輸出之后
a []text:在指定行后面追加文本,支持使用\n實(shí)現(xiàn)多行追加
i[]text:在行前面插入文本
c []text:替換行為單行或多行文本
w /path/somefile: 保存模式匹配的行至指定文件
r /path/somefile:讀取指定文件的文本至模式空間中匹配到的行后
=: 為匹配的模式空間中的行打印行號(hào)
!:模式空間中匹配行取反處理
4顷窒、查找替換
s///:查找替換,支持使用其它分隔符扮超,s@@@,s###
?替換標(biāo)記:
g: 行內(nèi)全局替換
p: 顯示替換成功的行
w /PATH/TO/SOMEFILE:將替換成功的行保存至文件中
5蹋肮、sed的高級編輯命令
?P:打印模式空間開端至\n內(nèi)容出刷,并追加到默認(rèn)輸出之前
?h: 把模式空間中的內(nèi)容覆蓋至保持空間中
?H:把模式空間中的內(nèi)容追加至保持空間中
?g: 從保持空間取出數(shù)據(jù)覆蓋至模式空間
?G:從保持空間取出內(nèi)容追加至模式空間
?x: 把模式空間中的內(nèi)容與保持空間中的內(nèi)容進(jìn)行互換
?n: 讀取匹配到的行的下一行覆蓋至模式空間
?N:讀取匹配到的行的下一行追加至模式空間
?d: 刪除模式空間中的行
?D:如果模式空間包含換行符,則刪除直到第一個(gè)換行符的模式空間中的文本坯辩,并不會(huì)讀取新的輸入行馁龟,而使用合成的模式空間重新啟動(dòng)循環(huán)。如果模式空間
6漆魔、舉例
[root@centos6 app]#seq 11 |sed -n '1~2p' ---打印奇數(shù)行
1
3
5
7
9
11
[root@centos6 app]#seq 11 |sed -n '2~2p'
2
4
6
8
10
[root@centos6 app]#seq 5|sed 'axy'
1
xy
2
xy
3
xy
4
xy
5
xy
[root@centos6 app]#seq 5|sed 'a\ xy' ---\加不加都可以坷檩,但加上有的時(shí)候可以前面多個(gè)空格
1
xy
2
xy
3
xy
4
xy
5
xy
[root@centos6 app]#seq 5|sed '2,4axyz'
1
2
xyz
3
xyz
4
xyz
5
[root@centos6 app]#seq 5|sed '2axyz\n====\n++++' ---\n可以追加多行內(nèi)容
1
2
xyz
====
++++
3
4
5
[root@centos6 ~]#sed '/^# Source/i alias yi="yum install"' .bashrc
# .bashrc
# User specific aliases and functions
alias grep='grep --color=auto'
alias egrep='egrep --color=auto'
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias p='poweroff'
alias cdpack='cd /misc/cd/Packages/'
alias cdnet='cd /etc/sysconfig/network-scripts/'
alias yi="yum install" ---在指定行的前面插入內(nèi)容
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
[root@centos6 ~]#sed '/^SELINUX=enforcing/cSELINUX=permissive' /etc/selinux/config ---替換
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=permissive
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
[root@centos6 ~]#seq 5|sed '2,4w /app/f1' ---保存模式空間的內(nèi)容到指定文件
1
2
3
4
5
[root@centos6 ~]#cd /app
[root@centos6 app]#ls
f1 mkdvdiso.sh
[root@centos6 app]#cat f1
2
3
4
[root@centos6 app]#seq 5|sed '3r /etc/issue' ---讀取文件中的內(nèi)容到指定的行后
1
2
3
CentOS release 6.9 (Final)
Kernel \r on an \m
\l
\n
\t
4
5
[root@centos6 app]#sed -e '/^#/d' -e '/^$/d' /etc/fstab ---多點(diǎn)編輯,表示以#開頭的行和空行刪除
UUID=07e3094b-c50d-4568-aee5-b2f76d91c962 / ext4 defaults 1 1
UUID=4a2031c3-8595-489e-bc6d-1e2c31860c7b /app ext4 defaults 1 2
UUID=a056e3b8-7cc2-4aea-9308-9b0744741394 /boot ext4 defaults 1 2
UUID=953b7594-f906-4d3e-8a3a-a6bb79b1c900 swap swap defaults 0 0
UUID=d027885d-e32b-42e7-94aa-329130282748 /home ext4 usrquota,grpquota 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
[root@centos6 app]#vim sed.txt
1 /^s/d
[root@centos6 app]#cat f2
bbbdddd
sdfgggg
1234445
[root@centos6 app]#sed -f sed.txt f2 ---調(diào)用文件中的腳本
bbbdddd
1234445
[root@centos6 app]#sed -n 's/ext4/xfs/p' /etc/fstab --- -p表示只打印匹配成功的行
UUID=07e3094b-c50d-4568-aee5-b2f76d91c962 / xfs defaults 1 1
UUID=4a2031c3-8595-489e-bc6d-1e2c31860c7b /app xfs defaults 1 2
UUID=a056e3b8-7cc2-4aea-9308-9b0744741394 /boot xfs defaults 1 2
UUID=d027885d-e32b-42e7-94aa-329130282748 /home xfs usrquota,grpquota 0 0
[root@centos6 app]#sed -nr 's/(bash)$/\1er/pg' p1---分組和后向引用
root:x:0:0:root:/root:/bin/basher
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/basher
zhang:x:500:500::/home/zhang:/bin/basher
tom:x:504:505::/home/tom:/bin/basher
libai:x:510:510::/home/libai:/bin/basher
dufu:x:512:512::/home/dufu:/bin/basher
zhaoritian:x:514:514::/home/zhaoritian:/bin/basher
gentoo:x:515:501:Gentoo Distribution:/home/gentoo:/bin/basher
natasha:x:516:516::/home/natasha:/bin/basher
harry:x:517:504::/home/harry:/bin/basher
alice:x:518:518::/home/alice:/bin/basher
bash:x:519:520::/home/bash:/bin/basher
testbash:x:520:521::/home/testbash:/bin/basher
sh:x:521:522::/home/sh:/bin/basher
[root@centos6 app]#sed -nr 's/bash$/&er/pg' p1 ---可以用&代替前面匹配的內(nèi)容
root:x:0:0:root:/root:/bin/basher
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/basher
zhang:x:500:500::/home/zhang:/bin/basher
tom:x:504:505::/home/tom:/bin/basher
libai:x:510:510::/home/libai:/bin/basher
dufu:x:512:512::/home/dufu:/bin/basher
zhaoritian:x:514:514::/home/zhaoritian:/bin/basher
gentoo:x:515:501:Gentoo Distribution:/home/gentoo:/bin/basher
natasha:x:516:516::/home/natasha:/bin/basher
harry:x:517:504::/home/harry:/bin/basher
alice:x:518:518::/home/alice:/bin/basher
bash:x:519:520::/home/bash:/bin/basher
testbash:x:520:521::/home/testbash:/bin/basher
sh:x:521:522::/home/sh:/bin/basher
[root@centos6 app]#ifconfig eth2|sed -n -e '2s/^.*addr://' -e '2s/ .*$//p' ---取出IP地址
192.168.25.179
[root@centos6 app]#ifconfig eth2|sed '2!d;s/^.*addr://;s/ .*$//' ---分號(hào)表示可以執(zhí)行多次操作
192.168.25.179