1.sed簡介
成都創(chuàng)新互聯(lián)網(wǎng)站建設(shè)服務(wù)商,為中小企業(yè)提供成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營銷網(wǎng)站建設(shè)服務(wù),網(wǎng)站設(shè)計(jì),綿陽服務(wù)器托管等一站式綜合服務(wù)型公司,專業(yè)打造企業(yè)形象網(wǎng)站,讓您在眾多競爭對(duì)手中脫穎而出成都創(chuàng)新互聯(lián)。
sed是一個(gè)面向字符流的“非交互式”編輯器,vim編譯中手工對(duì)文本的操作動(dòng)作大部分都可以通過sed命令來完成,這樣就方便在linux下編譯程序批量自動(dòng)處理文件,例如分析日志文件,修改配置文件等等。
2.sed命令用法
用法:
sed [OPTION]...'script'[input-file]
常用選項(xiàng):
-n :不輸出模式空間中的內(nèi)容至屏幕
-e script, --expression=script: 多點(diǎn)編輯
~]# sed -e 's@^UUID.*@@g' -e '/^[[:space:]]*$/d' /etc/fstab
-f script-file, --file=script-file 每行一個(gè)編輯命令
-r, --regexp-extended :支持使用擴(kuò)展的正則表達(dá)式
-i[SUFFIX], --in-place[=SUFFIX] :直接編輯源文件
此操作有風(fēng)險(xiǎn),請(qǐng)慎用?。?!
script:地址定界
(1)空地址:對(duì)全文進(jìn)行處理
(2)單地址:
#:指定行
/pattern/ :被此模式所匹配到的每一行
(3)地址范圍:
#,#:從#到#的行
#,+#:
#,/pat1/
/pat1/,/pat2/
$ :最后一行
(4)步進(jìn): ~
1~2 :所有奇數(shù)行
2~2 :所有偶數(shù)行
編輯命令:
d :刪除模式空間中的內(nèi)容
p :顯示模式空間中的內(nèi)容
a \text :在行后面追加文本"text",支持使用\n實(shí)現(xiàn)多行追加
i \text :在行前面插入文本"text",支持使用\n實(shí)現(xiàn)多行追加
c \text :把匹配到的行替換為此處指定的文本"test"
w /PATH/TO/SOMEFILE :保存模式空間匹配到的行到指定的文件中
= :為模式匹配到的行打印行號(hào)
! :條件取反
格式: 地址定界!編輯命令
r \PATH/TO/SOMEFILE :讀取指定文件的內(nèi)容至當(dāng)前文件被模式匹配到的行后面,一般用于文件合并
s/// :查找替換,其分隔符可自行指定,常用的有s@@@,s###等
替換標(biāo)記:
g :全局替換
p :顯示替換成功的行
w /PATH/TO/SOMEFILE :將替換成功的結(jié)果保存至指定文件中
用法示例:
1.在/etc/fstab文件中UUID的行前面加上注釋信息
~]# sed '/^UUID/i \this is UUID' /etc/fstab
2.刪除某文件的所有空紅
~]# sed '/^$/d' FILE
3.刪除/boot/grub2/grub.cfg文件中所有以空白字符開頭的行的行首的所有空白字符
~]# sed 's@^[[:space:]]\+@@g' grub.cfg
4.在/etc/fstab文件的行尾追加信息
~]# sed '$a \sed command end' /etc/fstab
3.高級(jí)編輯命令
h : 把模式空間中的內(nèi)容覆蓋至保持空間中
H :把模式空間中的內(nèi)容追加至保持空間中
g : 把保持空間中的內(nèi)容覆蓋至模式空間中
G : 把保持空間中的內(nèi)容追加至模式空間中
x : 把模式空間中的內(nèi)容與保持空間中互換
n : 覆蓋讀取匹配到的行的下一行至模式空間中
N : 追加讀取匹配到的行的下一行至模式空間中
d : 刪除模式空間中的行
D :刪除多行模式空間中的所有行
用法示例:
~]# sed -n 'n;p' FILE :顯示偶數(shù)行,";"用來分隔多個(gè)命令 ~]# sed '1!G;h;$!d' FILE :逆序顯示文件的內(nèi)容 ~]# sed '!$d' FILE : 取出最后一行 ~]# sed '$!N;$!D' FILE : 取出文件后兩行 ~]# sed '/^$/d;G' FILE : 刪除原有的所有的空白行,而后為所有的非空白行后添加一個(gè)空白行 ~]# sed 'n;d' FILE :顯示奇數(shù)行 ~]# sed 'G' FILE :在原有的每行后方添加一個(gè)空白行
4.實(shí)戰(zhàn)訓(xùn)練
實(shí)現(xiàn)每周備份一次一周內(nèi)被修改過的/etc/目錄下的所有文件
~]# vim /backups/bf.sh #!/bin/bash # # dir=etc-`date +%F-%H-%M-%S` mkdir -p /backups/$dir for file in `find /etc/* -mtime -7`;do cp -r $file /backups/$dir &> /dev/null done cd /backups && tar -Jcf ${dir}.tar.xz $dir && rm -rf /backups/$dir ~]# crontab -e 0 0 * * 1 /bin/bash /backups/bf.sh