一躲因、語法
sed [-hnV][-e<script>][-f<script文件>][文本文件]
參數(shù)說明:
-e<script>或--expression=<script> 以選項中指定的script來處理輸入的文本文件作彤。
-f<script文件>或--file=<script文件> 以選項中指定的script文件來處理輸入的文本文件第练。
-h或--help 顯示幫助二驰。
-n或--quiet或--silent 僅顯示script處理后的結(jié)果。
-V或--version 顯示版本信息稿静。動作說明
a :新增梭冠, a 的后面可以接字串,而這些字串會在新的一行出現(xiàn)(目前的下一行)
c :取代改备, c 的后面可以接字串控漠,這些字串可以取代 n1,n2 之間的行
d :刪除,因為是刪除啊悬钳,所以 d 后面通常不接任何咚咚
i :插入盐捷, i 的后面可以接字串,而這些字串會在新的一行出現(xiàn)(目前的上一行)
p :打印默勾,亦即將某個選擇的數(shù)據(jù)印出碉渡。通常 p 會與參數(shù) sed -n 一起運行
s :取代,可以直接進(jìn)行取代的工作哩母剥!通常這個 s 的動作可以搭配正規(guī)表示法滞诺!例如 1,20s/old/new/g注:
在sed后加上-i執(zhí)行后會修改原文件
$代表最后的意思
二、以行為單位的新增/刪除
1.刪除2~5行刪除
sed '2,5d'
2.只刪除第2行
sed '2d'
3.刪除第3到最后一行
sed '3,$d'
4.在第2行后(亦即是加在第三行)加上drink tea环疼?字樣
sed '2a drink tea?'
5.在第2行前加上drink tea习霹?字樣
sed '2i drink tea?'
6.2行之后追加兩行,例如Hello......與shell!
sed '2a Hello......\
\>shell!'
sed '2a Hello......\shell!'
7.2行之后追加三行(2行文字,1行空行)
sed '2a Hello......\shell!\n'
8.2行之后追加一行空行
sed '2a \ '
sed '2a \\'
9.2行之后追加兩行空行
sed '2a \\n'
三炫隶、以行為單位的替換與顯示
1.將2~5行的內(nèi)容取代成Hello shell
sed '2,5c Hello shell'
2.顯示文件的5~7行
sed -n '5,7p'
四淋叶、數(shù)據(jù)的搜尋并顯示
1.搜索有關(guān)root關(guān)鍵字的行
sed -n '/root/p'
使用-n的時候只打印包含模板的行
五、數(shù)據(jù)的搜尋并刪除
1.刪除包含root的行伪阶,其他行輸出
sed '/root/d'
六爸吮、數(shù)據(jù)的搜尋并執(zhí)行命令
1.找到root對應(yīng)的行,執(zhí)行后面花括號中的一組命令望门,每個命令之間用分號分隔,這里Hello替換成bash
sed -n '/root{s/Hello/bash/;p;q}'
最后的q是退出
七、數(shù)據(jù)的搜尋并替換
1.基本格式
sed 's/要被取代的字符串/新的字符串/g'
2.文本里每一行結(jié)尾若為.則換成锰霜!
sed 's/\\.$/\\!/g'
例:提取ip
/sbin/ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.116 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::f816:3eff:fe47:959d prefixlen 64 scopeid 0x20<link>
ether fa:16:3e:47:95:9d txqueuelen 1000 (Ethernet)
RX packets 1388641 bytes 402972654 (384.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1408963 bytes 164970470 (157.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
/sbin/ifconfig eth0 | grep 'inet' //inet后邊沒有空格
inet 192.168.0.116 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::f816:3eff:fe47:959d prefixlen 64 scopeid 0x20<link>
/sbin/ifconfig eth0 | grep 'inet ' //inet后邊有一個空格
inet 192.168.0.116 netmask 255.255.255.0 broadcast 192.168.0.255
/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/inet //g' //無^.*inet
192.168.0.116 netmask 255.255.255.0 broadcast 192.168.0.255
/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*inet //g'
192.168.0.116 netmask 255.255.255.0 broadcast 192.168.0.255
/sbin/ifconfig eth0 | grep 'inet addr' | sed 's/^.*addr://g' | sed 's/netmask//g' //無netmask.*$
192.168.0.116 255.255.255.0 broadcast 192.168.0.255
/sbin/ifconfig eth0 | grep 'inet ' | sed 's/^.*inet //g' |sed 's/netmask.*$//g'
192.168.0.116 //獲得ip
八筹误、多點編輯
1.刪除第3行到末尾的數(shù)據(jù),并把bash替換成Hello
sed -e '3,$d' -e 's/bash/Hello/'
-e表示多點編輯,第一個編輯命令刪除第3行到末尾的數(shù)據(jù)癣缅,第二條命令搜索bash替換為Hello
示例文件
#vim shell_sed.txt
zhangsan
zhangsan
lisi
lisi
wangwu
wangwu
用ergou替換lisi:
#sed -i 's/lisi/ergou/' shell_sed.txt
使用多重指令:
#sed -i 's/lisi/ergou/ ; s/zhangsan/lisi/' shell_sed.txt
使用腳本文件:
腳本:name
s/lisi/ergou/
s/zhangsan/lisi/
sed -f name shell_sed.txt
sed -f name shell_sed.txt >newshell_sed.txt //執(zhí)行腳本并保存修改后的文件
sed流編輯器用法及解析
sed '1d' shell_sed.txt //刪除文件的第一行
sed '1,2d' shell_sed.txt //刪除文件的第一厨剪、第二行
sed '2,$d' shell_sed.txt //刪除文件的第二行到最后一行
sed '/root/d' shell_sed.txt //刪除匹配到root的一行
sed '/root/2d' shell_sed.txt //刪除匹配到root的一行以及下一行
sed '1~2d' shell_sed.txt //刪除奇數(shù)行
sed '0~2d' shell_sed.txt //刪除偶數(shù)行
sed 's/wangwu/lisi/g' shell_sed.txt //全局替換
sed 's/wangwu/lisi/gi' shell_sed.txt //忽略大小寫的全局替換
sed '/^$/d' shell_sed.txt //刪除空行
sed -i.bak 's/wangwu/lisi/' shell_sed.txt //產(chǎn)生一個備份的文件以防后悔