sed是用來解析和轉換文本的工具,它使用簡單,是簡潔的程序設計語言。
sed編輯器
- (一) sed編輯器基礎
- 1. 簡介
- 2. sed的模式空間
- (二)基本的sed編輯命令
- (三)sed命令實例
- 1. 向文件中添加或插入行
- 2. 更改文件中的指定的行
- 3. 刪除文件中的行
- 4. 替換文件中內容
- 5. 打印文件中的行
(一) sed編輯器基礎
1. 簡介
- 自動化地編輯一個或多個文件
- 簡化在多個文件中執行相同編輯地任務
- 編寫轉換程序
2. sed的模式空間
sed維護一種模式空間,即一個工作區或臨時緩沖區,當使用編輯命令時,將在那存儲單個輸入行。下圖展示了進行模式空間轉換的一個兩行的sed腳本。它將“The linux system”轉換成“The LINUX Operating System”
sed一次處理一行輸入的優點是在讀取非常龐大的文件時不會出現問題,一般的文本編輯器必須將整個文件讀入內存,這將會產生內存溢出或者在處理龐大的文件時速度非常慢。
(二)基本的sed編輯命令
- a :新增, a 的后面可以接字串,而這些字串會在新的一行出現(目前的下一行)~
- c :取代, c 的后面可以接字串,這些字串可以取代 n1,n2 之間的行!
- d :刪除,因為是刪除啊,所以 d 后面通常不接任何東東;
- i :插入, i 的后面可以接字串,而這些字串會在新的一行出現(目前的上一行);
- p :打印,亦即將某個選擇的數據印出。通常 p 會與參數 sed -n 一起運行~
- s :取代,可以直接進行取代的工作哩!通常這個 s 的動作可以搭配正則表達式!
(三)sed命令實例
1. 向文件中添加或插入行
實例1:在文件的指定行之后添加一行內容。
$ cat info.txt
Linux - Sysadmin
Databased - Oracle, MySQL etc
Security - Firewall, Network, Oline Security etc
Cool - Websities
Storage - NetApp, EMC etc
Productivity - Too many technologies to explore, no much time available
使用sed的追加編輯命令(a)在上述文件的第5行添加一行命令:
[ley@ley-web ~]$ sed '5a\
> Solaris - Sysadmin, Recovery etc.' info.txt
Linux - Sysadmin
Databased - Oracle, MySQL etc
Security - Firewall, Network, Oline Security etc
Cool - Websities
Storage - NetApp, EMC etc
Solaris - Sysadmin, Recovery etc.
Productivity - Too many technologies to explore, no much time available
實例2:在匹配模式的行之后添加一行內容
$ sed '/Databases/a\
> Solaris - Sysadmin, Recovery etc.' info.txt
Linux - Sysadmin
Databased - Oracle, MySQL etc
Security - Firewall, Network, Oline Security etc
Cool - Websities
Storage - NetApp, EMC etc
Productivity - Too many technologies to explore, no much time available
實例3:在文本的最后一行后添加多行內容
在info.txt文件后面添加兩行
$ sed '$a\
> Solaris - Sysadmin, Recovery etc.\
> Windows - Sysadmin etc.' info.txt
Linux - Sysadmin
Databased - Oracle, MySQL etc
Security - Firewall, Network, Oline Security etc
Cool - Websities
Storage - NetApp, EMC etc
Productivity - Too many technologies to explore, no much time availableSolaris - Sysadmin, Recovery etc.
Windows - Sysadmin etc.
實例4:在文件中的指定行之前插入一行內容。
$ sed '3i\
> Solaris - Sysadmin, Recovery etc.' info.txt
Linux - Sysadmin
Databased - Oracle, MySQL etc
Solaris - Sysadmin, Recovery etc.
Security - Firewall, Network, Oline Security etc
Cool - Websities
Storage - NetApp, EMC etc
Productivity - Too many technologies to explore, no much time available
實例5:在匹配指定模式的行之前插入一行內容。
在文件info.txt中匹配/Security/的行之前插入兩行內容。
$ sed '/Security/i\
> Solaris - Sysadmin, Recovery etc.\
> Windows - Sysadmin etc.' info.txt
Linux - Sysadmin
Databased - Oracle, MySQL etc
Solaris - Sysadmin, Recovery etc.
Windows - Sysadmin etc.
Security - Firewall, Network, Oline Security etc
Cool - Websities
Storage - NetApp, EMC etc
Productivity - Too many technologies to explore, no much time available
實例6:在文件的最后一行之前插入一行內容
$ sed '$i\
> Solaris - Sysadmin, Recovery etc.' info.txt
Linux - Sysadmin
Databased - Oracle, MySQL etc
Security - Firewall, Network, Oline Security etc
Cool - Websities
Storage - NetApp, EMC etc
Solaris - Sysadmin, Recovery etc.
Productivity - Too many technologies to explore, no much time available
2. 更改文件中的指定的行
實例1:修改文件的第一行
$ sed '1c<Change line>' info.txt
<Change line>
Databased - Oracle, MySQL etc
Security - Firewall, Network, Oline Security etc
Cool - Websities
Storage - NetApp, EMC etc
Productivity - Too many technologies to explore, no much time available
實例2:修改匹配指定模式的行
匹配/Cool/的行修改為
$ sed '/Cool/c<Change line>' info.txt
Linux - Sysadmin
Databased - Oracle, MySQL etc
Security - Firewall, Network, Oline Security etc
<Change line>
Storage - NetApp, EMC etc
Productivity - Too many technologies to explore, no much time available
實例3:更改文件的最后一行。
$ sed '$c<Change line>' info.txt
Linux - Sysadmin
Databased - Oracle, MySQL etc
Security - Firewall, Network, Oline Security etc
Cool - Websities
Storage - NetApp, EMC etc
<Change line>
3. 刪除文件中的行
實例1:刪除文件中的指定的行
刪除文件所在的第四行
$ sed '4d' info.txt
1 Linux - Sysadmin
2 Databased - Oracle, MySQL etc
3 Security - Firewall, Network, Oline Security etc
5 Storage - NetApp, EMC etc
6 Productivity - Too many technologies to explore, no much time available
實例2:從指定的行開始刪除,并每個固定行刪除一行
從第四行開始刪除,并每隔兩行就刪掉一行
$ sed '4~2d' info.txt
1 Linux - Sysadmin
2 Databased - Oracle, MySQL etc
3 Security - Firewall, Network, Oline Security etc
5 Storage - NetApp, EMC etc
實例3:刪除指定范圍的行
$ sed '3,6d' info.txt
1 Linux - Sysadmin
2 Databased - Oracle, MySQL etc
實例4:刪除指定范圍以外的行
刪除3到6行以外的行
$ sed '3,6!d' info.txt
3 Security - Firewall, Network, Oline Security etc
4 Cool - Websities
5 Storage - NetApp, EMC etc
6 Productivity - Too many technologies to explore, no much time available
實例5:刪除文件中的最后一行
$ sed '$d' info.txt
1 Linux - Sysadmin
2 Databased - Oracle, MySQL etc
3 Security - Firewall, Network, Oline Security etc
4 Cool - Websities
5 Storage - NetApp, EMC etc
實例6:刪除文件中匹配指定模式的行。
匹配/Productivity/的行并刪除
$ sed '/Productivity/d' info.txt
1 Linux - Sysadmin
2 Databased - Oracle, MySQL etc
3 Security - Firewall, Network, Oline Security etc
4 Cool - Websities
5 Storage - NetApp, EMC etc
實例7:從匹配指定模式的行刪到文件的最后一行
$ sed '/Productivity/,$d' info.txt
1 Linux - Sysadmin
2 Databased - Oracle, MySQL etc
3 Security - Firewall, Network, Oline Security etc
4 Cool - Websities
5 Storage - NetApp, EMC etc
實例8:刪除文件中匹配指定模式的行,及其后面的n行內容
刪除info.txt文件中的/Security/,及其后面的一行
$ sed '/Security/,+1d' info.txt
1 Linux - Sysadmin
2 Databased - Oracle, MySQL etc
5 Storage - NetApp, EMC etc
6 Productivity - Too many technologies to explore, no much time available
實例9:刪除文件中的空行
$ sed '/^$/d' info.txt
1 Linux - Sysadmin
2 Databased - Oracle, MySQL etc
3 Security - Firewall, Network, Oline Security etc
4 Cool - Websities
5 Storage - NetApp, EMC etc
6 Productivity - Too many technologies to explore, no much time available
實例10:刪除文件中不匹配指定模式的行
刪除文件中不匹配/Databased/或/Security/的行
$ sed '/Databased\|Security/!d' info.txt
2 Databased - Oracle, MySQL etc
3 Security - Firewall, Network, Oline Security etc
實例11:刪除文件的指定范圍內的行中匹配指定模式的行。
刪除含有etc的行
$ sed '1,4{/etc/d}' info.txt
1 Linux - Sysadmin
4 Cool - Websities
5 Storage - NetApp, EMC etc
6 Productivity - Too many technologies to explore, no much time available
4. 替換文件中內容
$ cat techClass.txt
1. Network: Route, Switch, Wireless,Communicate, Device
2. Security: Data Protection,Terminal Security,C1oud Security,WEB Security
3. Server: Blade,Mini Computer,Mainframes,HPC,Disaster Recovery, Network
4. Virtualization:Server Virtualization,Storage Virtualization, Desktop Virtualization
5. Database: SQLServer,MySQL,Oracle, DB2
6. OS: Linux, Unix, Windows
實例1:替換一行中第一個匹配模式的字符串
將每一行的第一個/Virtualization替換成/Virt
$ sed 's/Virtualization/Virt./' techClass.txt
1. Network: Route, Switch, Wireless,Communicate, Device
2. Security: Data Protection,Terminal Security,C1oud Security,WEB Security
3. Server: Blade,Mini Computer,Mainframes,HPC,Disaster Recovery, Network
4. Virt.:Server Virtualization,Storage Virtualization, Desktop Virtualization
5. Database: SQLServer,MySQL,Oracle, DB2
6. OS: Linux, Unix, Windows
# Additional class
實例2:替換文件中的匹配指定模式的所有字符串
將每一行的所有/Virtualization替換成/Virt
$ sed 's/Virtualization/Virt./g' techClass.txt
1. Network: Route, Switch, Wireless,Communicate, Device
2. Security: Data Protection,Terminal Security,C1oud Security,WEB Security
3. Server: Blade,Mini Computer,Mainframes,HPC,Disaster Recovery, Network
4. Virt.:Server Virt.,Storage Virt., Desktop Virt.
5. Database: SQLServer,MySQL,Oracle, DB2
6. OS: Linux, Unix, Windows
# Additional class
實例3:替換文件中每行第n個匹配指定模式的字符串
將每一行的第三個/Virtualization替換成/Virt
$ sed 's/Virtualization/Virt./3' techClass.txt
1. Network: Route, Switch, Wireless,Communicate, Device
2. Security: Data Protection,Terminal Security,C1oud Security,WEB Security
3. Server: Blade,Mini Computer,Mainframes,HPC,Disaster Recovery, Network
4. Virtualization:Server Virtualization,Storage Virt., Desktop Virtualization
5. Database: SQLServer,MySQL,Oracle, DB2
6. OS: Linux, Unix, Windows
# Additional class
實例4:將發生字符串替換的行寫入指定的文件,并只打印發生替換的行
將文件中的“Network”字符串替換為“Net.”
$ sed -n 's/Network/Net./gpw /tmp/sedOutput' techClass.txt
1. Net.: Route, Switch, Wireless,Communicate, Device
3. Server: Blade,Mini Computer,Mainframes,HPC,Disaster Recovery, Net.
實例5:只替換文件中匹配指定模式的行中的字符串
文件中匹配/:/的行中的逗號“,”之后的字符串清空
$ sed '/:/s/,.*//g' techClass.txt
1. Network: Route
2. Security: Data Protection
3. Server: Blade
4. Virtualization:Server Virtualization
5. Database: SQLServer
6. OS: Linux
# Additional class
實例6:刪掉每行的最后n個字符
刪掉文件中每行最后兩個字符
$ sed 's/..$//g' techClass.txt
1. Network: Route, Switch, Wireless,Communicate, Devic
2. Security: Data Protection,Terminal Security,C1oud Security,WEB Securit
3. Server: Blade,Mini Computer,Mainframes,HPC,Disaster Recovery, Networ
4. Virtualization:Server Virtualization,Storage Virtualization, Desktop Virtualizati
5. Database: SQLServer,MySQL,Oracle, DB
6. OS: Linux, Unix, Window
# Additional cla
實例7:刪除文件中的注釋
$ sed 's/^#.*//' techClass.txt
1. Network: Route, Switch, Wireless,Communicate, Device
2. Security: Data Protection,Terminal Security,C1oud Security,WEB Security
3. Server: Blade,Mini Computer,Mainframes,HPC,Disaster Recovery, Network
4. Virtualization:Server Virtualization,Storage Virtualization, Desktop Virtualization
5. Database: SQLServer,MySQL,Oracle, DB2
6. OS: Linux, Unix, Windows
實例8:刪除文件中的注釋及其空行
$ sed 's/^#.*//;/^$/d' techClass.txt
1. Network: Route, Switch, Wireless,Communicate, Device
2. Security: Data Protection,Terminal Security,C1oud Security,WEB Security
3. Server: Blade,Mini Computer,Mainframes,HPC,Disaster Recovery, Network
4. Virtualization:Server Virtualization,Storage Virtualization, Desktop Virtualization
5. Database: SQLServer,MySQL,Oracle, DB2
6. OS: Linux, Unix, Windows
實例9:使用符號“&”獲得匹配的字符串
每一行數字編號加一個小括號()
$ sed 's/^[0-9]\./(&)/' techClass.txt
(1.) Network: Route, Switch, Wireless,Communicate, Device
(2.) Security: Data Protection,Terminal Security,C1oud Security,WEB Security
(3.) Server: Blade,Mini Computer,Mainframes,HPC,Disaster Recovery, Network
(4.) Virtualization:Server Virtualization,Storage Virtualization, Desktop Virtualization
(5.) Database: SQLServer,MySQL,Oracle, DB2
(6.) OS: Linux, Unix, Windows
# Additional class
5. 打印文件中的行
實例1:打印文件中的第n行
$ sed -n '4p' techClass.txt
Virtualization:Server Virtualization,Storage Virtualization, Desktop Virtuali zation
實例2:文件從第n行開始打印,并每隔m-1行就打印一行。
$ sed -n '3~2p' techClass.txt
3. Server: Blade,Mini Computer,Mainframes,HPC,Disaster Recovery, Network
5. Database: SQLServer,MySQL,Oracle, DB2
# Additional class
實例3:打印文件的最后一行
$ sed -n '$p' techClass.txt
# Additional class
實例4:打印文件的第n~m行
$ sed -n '2,6p' techClass.txt
2. Security: Data Protection,Terminal Security,C1oud Security,WEB Security
3. Server: Blade,Mini Computer,Mainframes,HPC,Disaster Recovery, Network
4. Virtualization:Server Virtualization,Storage Virtualization, Desktop Virtualization
5. Database: SQLServer,MySQL,Oracle, DB2
6. OS: Linux, Unix, Windows
實例5:打印文件的第n行到最后一行
$ sed -n '3,$p' techClass.txt
3. Server: Blade,Mini Computer,Mainframes,HPC,Disaster Recovery, Network
4. Virtualization:Server Virtualization,Storage Virtualization, Desktop Virtualization
5. Database: SQLServer,MySQL,Oracle, DB2
6. OS: Linux, Unix, Windows
# Additional class
實例6:打印文件中匹配指定模式的行
$ sed -n '/Network/p' techClass.txt
1. Network: Route, Switch, Wireless,Communicate, Device
3. Server: Blade,Mini Computer,Mainframes,HPC,Disaster Recovery, Network
實例7:打印文件中從匹配指定模式的行到第n行的內容
$ sed -n '/Security/,6p' techClass.txt
2. Security: Data Protection,Terminal Security,C1oud Security,WEB Security
3. Server: Blade,Mini Computer,Mainframes,HPC,Disaster Recovery, Network
4. Virtualization:Server Virtualization,Storage Virtualization, Desktop Virtualization
5. Database: SQLServer,MySQL,Oracle, DB2
6. OS: Linux, Unix, Windows
實例8:打印文件中從第n行道匹配指定模式的行的內容
$ sed -n '1,/Database/p' techClass.txt
1. Network: Route, Switch, Wireless,Communicate, Device
2. Security: Data Protection,Terminal Security,C1oud Security,WEB Security
3. Server: Blade,Mini Computer,Mainframes,HPC,Disaster Recovery, Network
4. Virtualization:Server Virtualization,Storage Virtualization, Desktop Virtualization
5. Database: SQLServer,MySQL,Oracle, DB2
實例9:打印文件中從匹配指定模式的行到最后一行
$ sed -n '/Server/,$p' techClass.txt
3. Server: Blade,Mini Computer,Mainframes,HPC,Disaster Recovery, Network
4. Virtualization:Server Virtualization,Storage Virtualization, Desktop Virtualization
5. Database: SQLServer,MySQL,Oracle, DB2
6. OS: Linux, Unix, Windows
# Additional class
實例10:打印文件中匹配指定模式的行及后面的n行
$ sed -n '/Network/,+1p' techClass.txt
1. Network: Route, Switch, Wireless,Communicate, Device
2. Security: Data Protection,Terminal Security,C1oud Security,WEB Security
3. Server: Blade,Mini Computer,Mainframes,HPC,Disaster Recovery, Network
4. Virtualization:Server Virtualization,Storage Virtualization, Desktop Virtualization
實例11:打印文件中從匹配模式的行到匹配另一個指定模式的行的內容
$ sed -n '/Security/,/OS/p' techClass.txt
2. Security: Data Protection,Terminal Security,C1oud Security,WEB Security
3. Server: Blade,Mini Computer,Mainframes,HPC,Disaster Recovery, Network
4. Virtualization:Server Virtualization,Storage Virtualization, Desktop Virtualization
5. Database: SQLServer,MySQL,Oracle, DB2
6. OS: Linux, Unix, Windows