本文共 6718 字,大约阅读时间需要 22 分钟。
This article is part of the on going Unix sed command tutorial series. In our previous articles we learned sed with single commands — , , and
Sed provides lot of commands to perform number of operations with the lines in a file.
In this article let us review how to append, insert, replace a line in a file and how to get line numbers of a file.
Let us first create thegeekstuff.txt file that will be used in all the examples mentioned below.
$cat thegeekstuff.txtLinux SysadminDatabases - Oracle, mySQL etc.Security (Firewall, Network, Online Security etc)Storage in LinuxProductivity (Too many technologies to explore, not much time available)Windows- Sysadmin, reboot etc.
Sed provides the command “a” which appends a line after every line with the address or pattern.
Syntax:#sed 'ADDRESS a\ Line which you want to append' filename#sed '/PATTERN/ a\ Line which you want to append' filename
Add the line “Cool gadgets and websites” after the 3rd line. sed “a” command inserts the line after match.
$ sed '3 a\> Cool gadgets and websites' thegeekstuff.txtLinux SysadminDatabases - Oracle, mySQL etc.Security (Firewall, Network, Online Security etc)Cool gadgets and websitesStorage in LinuxProductivity (Too many technologies to explore, not much time available)Windows- Sysadmin, reboot
The below sed command will add the line “Linux Scripting” after every line that matches the pattern “Sysadmin”.
$ sed '/Sysadmin/a \> Linux Scripting' thegeekstuff.txtLinux SysadminLinux ScriptingDatabases - Oracle, mySQL etc.Security (Firewall, Network, Online Security etc)Storage in LinuxProductivity (Too many technologies to explore, not much time available)Windows- Sysadmin, reboot etc.Linux Scripting
The following example, appends the line “Website Design” at the end of the file.
$ sed '$ a\> Website Design' thegeekstuff.txtLinux SysadminDatabases - Oracle, mySQL etc.Security (Firewall, Network, Online Security etc)Storage in LinuxProductivity (Too many technologies to explore, not much time available)Windows- Sysadmin, reboot etc.Website Design
Sed command “i” is used to insert a line before every line with the range or pattern.
Syntax:#sed 'ADDRESS i\ Line which you want to insert' filename#sed '/PATTERN/ i\ Line which you want to insert' filename
Add a line “Cool gadgets and websites” before 4th line. “a” command inserts the line after match whereas “i” inserts before match.
可以写做一行 sed '4 i Cool Gadets' thegeekstuff.txt
$ sed '4 i\> Cool gadgets and websites' thegeekstuff.txtLinux SysadminDatabases - Oracle, mySQL etc.Security (Firewall, Network, Online Security etc)Cool gadgets and websitesStorage in LinuxProductivity (Too many technologies to explore, not much time available)Windows- Sysadmin, reboot etc.
The below sed command will add a line “Linux Scripting” before every line that matches with the pattern called ‘Sysadmin”.
$ sed '/Sysadmin/i \> Linux Scripting' thegeekstuff.txtLinux ScriptingLinux SysadminDatabases - Oracle, mySQL etc.Security (Firewall, Network, Online Security etc)Storage in LinuxProductivity (Too many technologies to explore, not much time available)Linux ScriptingWindows- Sysadmin, reboot etc.
Append a line “Website Design” before the last line of the file.
$ sed '$ i\> Website Design' thegeekstuff.txtLinux SysadminDatabases - Oracle, mySQL etc.Security (Firewall, Network, Online Security etc)Storage in LinuxProductivity (Too many technologies to explore, not much time available)Website DesignWindows- Sysadmin, reboot etc.
“c” command in sed used to replace every line matches with the pattern or ranges with the new given line.
Syntax:#sed 'ADDRESS c\ new line' filename#sed '/PATTERN/ c\ new line' filename
The below command replaces the first line of the file with the “The Geek Stuff”.
$ sed '1 c\> The Geek Stuff' thegeekstuff.txtThe Geek StuffDatabases - Oracle, mySQL etc.Security (Firewall, Network, Online Security etc)Storage in LinuxProductivity (Too many technologies to explore, not much time available)Windows- Sysadmin, reboot etc.
Replace everyline which has a pattern “Linux Sysadmin” to “Linux Sysadmin – Scripting”.
$ sed '/Linux Sysadmin/c \> Linux Sysadmin - Scripting' thegeekstuff.txtLinux Sysadmin - ScriptingDatabases - Oracle, mySQL etc.Security (Firewall, Network, Online Security etc)Storage in LinuxProductivity (Too many technologies to explore, not much time available)Windows- Sysadmin, reboot etc.
Sed command given below replaces the last line of the file with “Last Line of the file”.
$ sed '$ c\> Last line of the file' thegeekstuff.txtLinux SysadminDatabases - Oracle, mySQL etc.Security (Firewall, Network, Online Security etc)Storage in LinuxProductivity (Too many technologies to explore, not much time available)Last line of the file
“=” is a command in sed to print the current line number to the standard output.
Syntax:#sed '=' filename
The above send command syntax prints line number in the first line and the original line from the file in the next line .
sed ‘=’ command accepts only one address, so if you want to print line number for a range of lines, you must use the curly braces.
Syntax:# sed -n '/PATTERN/,/PATTERN/ {=p}' filename
The below sed command prints the line number for which matches with the pattern “Databases”
$ sed -n '/Databases/=' thegeekstuff.txt2
一行的写法 : sed -n '1,5{=;p}' thegeekstuff.txt
Print the line numbers for the lines matches from the pattern “Oracle” to “Productivity”.
$ sed -n '/Oracle/,/Productivity/{> => p> }' thegeekstuff.txt2Databases - Oracle, mySQL etc.3Security (Firewall, Network, Online Security etc)4Storage in Linux5Productivity (Too many technologies to explore, not much time available)
Line number of the last line of the file will be the total lines in a file. Pattern $ specifies the last line of the file.
$ sed -n '$=' thegeekstuff.txt6
转载地址:http://kyffb.baihongyu.com/