sed自己是一個管道命令,能夠分析standard input,並且sed還能夠將數據進行替換,刪除,新增,選取特定行等功能,下面來了解一下sed的具體功能正則表達式
sed Stream EDitor 流編輯器shell
sed[option]... 'script' [input-file]...centos
script: 地址定界編輯命令bash
經常使用選項:編輯器
-n:不輸出模式空間中的內容至屏幕上ide
-e:直接在命令行模式上進行sed的動做編輯centos7
-f:直接將sed的動做寫在一個文件內spa
-r:支持使用擴展的正則表達式命令行
-i:直接編輯原文件ip
地址定界:
(1)空地址:對全文進行處理
(2)單地址
#:指定行
/pattern/:被此模式所匹配的每一行
(3)地址範圍
#,#:
#,+#:
#,/pat1/
/pat1/,/pat2/
(4)步進:~
1~2:全部奇數行
2~2:全部偶數行
編輯命令:
d:刪除
p:顯示模式空間的內容
a \text: 在行後面追加文本"text",支持使用\n實現多行追加
i \text :在行前面插入文本"text",支持使用\n實現多行插入
c \text:把匹配到的行替換爲此處指定的文本"text"
w /PATH/TO/SOMEFILE:保存模式空間匹配到的
r:/PATH/FROM/SOMEFILE:讀取指定文件內容至當前文件所匹配的行後面;合併文件
=:爲模式匹配到的行打印行號:
!:條件取反 用法:地址定界!編輯命令
s///:查找替換,其分隔符可自行指定,經常使用的有s@@@,s###等:
替換標記:
g:全局替換
w /PATH/TO/SOMEFILE:將替換成功的結果報新婚之指定文件中:
p:顯示替換成功的行
sed用法示例:
1.sed‘/^$/d’ file #刪除空行
2.sed‘1,10d’ file #刪除第一到第十行
3.nl/etc/passwd| sed‘2,5d’ #刪除第二到第五行
4.nl/etc/passwd| sed‘2a tea’ #在第二行後面追加 tea字符
5.sed's/test/mytest/g' example #在example文件中把test全局替換成mytest
6.sed–n‘s/root/&superman/p’ /etc/passwd #把etc/passwd中的root替換成rootsuperman,並顯示
7.sed–n‘s/root/superman&/p’ /etc/passwd #把etc/passwd中的root替換成supermanroot,並顯示
8.sed -e ‘s/dog/cat/’ -e ‘s/hi/lo/’ pets #多點編輯
9.sed–i.bak ‘s/dog/cat/g’ pets #備份,並在文件上把dog修改成cat
練習:
1.刪除/boot/grub2.cfg文件中全部以空白開頭的行的行首的全部空白字符
[root@centos7 ~]# sed "s/^[[:space:]]\+//g" /etc/grub2.cfg
2.刪除/etc/fstab文件中全部以#開頭的行的行首的#號及#號後面的全部的空白字符 [root@centos7 ~]# sed "s/^#[[:space:]]*//g" /etc/fstab
3.一個絕對路徑sed命令,去除其目錄,其行爲相似於dirnamed
[root@centos7 ~]# echo "/var/log/message" |sed "s/[^/]\+$//g"
4.一條sed命令,刪除/etc/passwd第三行到末尾的數據,並把bash替換爲blueshell
[root@centos7 testdir]# sed -e '3,$d' -e 's@bash@blueshell@' /etc/passwd
root:x:0:0:root:/root:/bin/blueshell
bin:x:1:1:bin:/bin:/sbin/nologin
5.利用 sed 將 file1# 則換成 !
sed -i 's@^#@!@' file1
高級編輯命令:
h:把模式空間中的內容覆蓋至保持空間中:
H:把模式空間內的內容追加至保持空間內
g:把保持空間的內容覆蓋至模式空間中
G:把保持空間內的內容追加至模式空間中
x:把模式空間中的內容與保持空間內的內容互換
n:覆蓋讀取匹配到的行的下一行至模式空間中
N:追加讀取匹配的行的下一行至模式空間中
d:刪除模式空間中的行
D:刪除多行模式空間的全部行:
示例:
sed -n 'n:p' file 顯示偶數行
sed '1|G;$!d' file:逆序顯示文件的內容
sed '$!d' file 取出最後一行
sed '$!N;$!D'file :取出文件後兩行
sed'/^$/d;G'file