sed流編輯器,擅長對文本進行增刪改查,過濾指定的字符串和取指定行,也能夠在行中字符串先後插入內容,功能很是強大.linux
sed命令的語法及經常使用選項:ios
sed [OPTION]... {script-only-if-no-other-script} [input-file] 選項 sed內置命令符 文本文件
選項 | 選項說明 |
-n | 取消默認輸出,只打印被sed處理的行正則表達式 (sed相似cat,不加-n會輸出全部內容)緩存 |
-e | 使用-e能夠屢次編輯,但要注意順序會影響編輯的結果 |
-r | 使用此參數後,配合使用正則表達式無需\轉義 |
-i | 直接修改(替換)文本內容,不在屏幕輸出顯示 |
sed的內置命令符經常使用於實現對文本的操做功能,如增刪改查等: app
內置命令符 | 說明 |
a | append,在指定行後添加一行或多行文本 |
d | delete,刪除指定行 |
p | print,打印匹配到的行,有時候會和-n參數配合使用 |
s | 用一個字符串替換另外一個字符串 |
g | global,在行內進行全局替換 |
i | insert,在指定行前添加一行或者多行文本 |
如下文本爲測試文件. 編輯器
[root@test ~]# cat a.txt 101 zhangsan guangdong 333 555 102 lisi guangxi 444 555 666 103 wangyi hunan 111 222 333 104 libai hubei 999 1000 777 105 dupu beijing 11122 3333222 5555
[root@test ~]# sed -n '/libai/p' a.txt #<==打印字符串所在行 104 libai hubei 999 1000 777 [root@test ~]# sed -n '1,2p' a.txt #<==按照行號打印行,打印連續行 101 zhangsan guangdong 333 555 102 lisi guangxi 444 555 666 [root@test ~]# ifconfig eth0|sed -nr 's/^.*net (.*) net.*$/\1/gp' #<==c7.x中,gp配合使用,經常使用用法 10.0.0.30
[root@test ~]# sed '/zhangsan/d' a.txt #<==刪除包含指定字符串的全部行(緩存中刪除) 102 lisi guangxi 444 555 666 103 wangyi hunan 111 222 333 104 libai hubei 999 1000 777 105 dupu beijing 11122 3333222 5555 [root@test ~]# sed '3d' a.txt #<==刪除指定行(緩存中刪除) 101 zhangsan guangdong 333 555 102 lisi guangxi 444 555 666 104 libai hubei 999 1000 777 105 dupu beijing 11122 3333222 5555 [root@test ~]# sed '2,5d' a.txt #<==刪除2,3,4,5行,連續多行刪除 101 zhangsan guangdong 333 555 [root@test ~]# sed -i '4d' a.txt #<==真正刪除內容 [root@test ~]# sed '3,$d' a.txt #<===刪除第3行至末尾,剩下的都被打印顯示 101 zhangsan guangdong 333 555 102 lisi guangxi 444 555 666 [root@test ~]# sed '/^$/d' a.txt #<==刪除空行
[root@test ~]# sed 's/libai/libaibai/g' a.txt #<==全局替換單個字符串單詞 101 zhangsan guangdong 333 555 102 lisi guangxi 444 555 666 103 wangyi hunan 111 222 333 104 libaibai hubei 999 1000 777 105 dupu beijing 11122 3333222 5555 [root@test ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config #<==系統優化選項 [root@test ~]# cat b.txt #<==若是沒有g全局替換,默認是將每一行的第一個匹配的字符串替換 1111 BBBBB CCCCC 1111 AAAA 2222 3333 1111 DDDD 1111 [root@test ~]# sed 's/1111/EEEE/' b.txt EEEE BBBBB CCCCC 1111 AAAA 2222 3333 EEEE DDDD 1111 [root@test ~]# sed -n 's/^101/DDD/p' a.txt #<==只有匹配了101並替換纔會打印此行 DDD zhangsan guangdong 333 555 [root@test ~]# ifconfig eth0|sed -nr 's/^.*net (.*) net.*$/\1/gp' #<==替換並打印IP地址 10.0.0.30
注意: a 增長內容是在行後; i 插入內容是在行前測試
[root@test ~]# sed '3a 103.3 liubei sichuang 456 123 789' a.txt #<==在指定行後增長內容 101 zhangsan guangdong 333 555 102 lisi guangxi 444 555 666 103 wangyi hunan 111 222 333 103.3 liubei sichuang 456 123 789 104 libai hubei 999 1000 777 105 dupu beijing 11122 3333222 5555 [root@test ~]# sed -i '3a 103.3 liubei sichuang 456 123 789' a.txt #<==真正增長內容 [root@test ~]# sed '2i 101.1 liubei sichuang 444 556 111' a.txt 101 zhangsan guangdong 333 555 101.1 liubei sichuang 444 556 111 102 lisi guangxi 444 555 666 103 wangyi hunan 111 222 333 104 libai hubei 999 1000 777 105 dupu beijing 11122 3333222 5555 [root@test ~]# sed -i '2i 101.1 liubei sichuang 444 556 111' a.txt #<==真正插入內容 [root@test ~]# sed 's/lisi/nihao &/' a.txt #<==在指定字符串(文本中惟一)前插入內容,注意看狀況是否添加空格 101 zhangsan guangdong 333 555 102 nihao lisi guangxi 444 555 666 103 wangyi hunan 111 222 333 104 libai hubei 999 1000 777 105 dupu beijing 11122 3333222 5555 [root@test ~]# sed 's/lisi/& nihao/' a.txt #<==在指定字符串(文本中惟一)後插入內容,注意看狀況是否添加空格 101 zhangsan guangdong 333 555 102 lisi nihao guangxi 444 555 666 103 wangyi hunan 111 222 333 104 libai hubei 999 1000 777 105 dupu beijing 11122 3333222 5555 [root@test ~]# sed 's/rhgb/& crashkernel=auto biosdevname=0 net.ifnames=0/' /etc/sysconfig/grub.bak #<==c7.x系統優化內核實例 [root@test ~]# sed '3 s/wangyi/& test/' a.txt #<==指定行號,在某個字符串後插入內容 [root@test ~]# sed 's/^/HEAD&/' a.txt #<==在每行行頭添加內容 HEAD101 zhangsan guangdong 333 555 HEAD102 lisi guangxi 444 555 666 HEAD103 wangyi hunan 111 222 333 HEAD104 libai hubei 999 1000 777 HEAD105 dupu beijing 11122 3333222 5555 [root@test ~]# sed 's/$/&HEAD/' a.txt #<==在每行行尾添加內容 101 zhangsan guangdong 333 555HEAD 102 lisi guangxi 444 555 666HEAD 103 wangyi hunan 111 222 333HEAD 104 libai hubei 999 1000 777HEAD 105 dupu beijing 11122 3333222 5555HEAD