注:学习sed命令的参考书籍为《Sed&Awk》,所以笔记也都是参考该书。
sed命令的基本语法和命令:
一、sed命令语法
sed [options] {sed-commands} {input-file}
sed是按每行依次读取input-file,然后执行sed-command,执行完的数据写入模式空间。
options是用来传递sed命令的可选参数。
当需要使用多条命令的时候可以使用-e参数,其语法如下:
sed [options] -e {sed-command1} -e {sed-command2} -e {command3} {input-file}
也可以多条命令多行显示,其语法如下:
sed [option] ‘{
>sed-command1
>sed-command2
}‘ {input-file}
当命令过多时,可以将命令写入一个文档中,然后使用-f参数来实现,其语法如下:
sed [options] -f {commands-file} {input-file}
sed命令并不改变文件内容。
二、sed命令的执行流程
1、read(读取):读取一行到模式空间
2、execute(执行):在模式空间里执行命令(多条命令的时候会依次执行)
3、print(打印):将模式空间中经过执行后的内容打印出来,并清空模式空间
4、repeat(重复):按行重复上面的过程
三、打印模式空间(命令p)
1、默认不加[options]的sed命令打印模式空间
语法:sed ‘p‘ {input-file}
[root@Shell ~]# sed ‘p‘ employee.txt
101,John Doe,CEO
101,John Doe,CEO
102,Jason Smith,IT Manager
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
105,Jane Miller,Sales Manager
2、只输出文件内容
语法:sed -n ‘p‘ {input-file}
[root@Shell ~]# sed -n ‘p‘ employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
3、指定地址范围打印
①只打印某一行
语法:sed -n ‘x p‘ {input-file}(x表示某行)
[root@Shell ~]# sed -n ‘2 p‘ employee.txt
102,Jason Smith,IT Manager
②打印第x行到第y行
语法:sed -n ‘x,y p‘ {input-file}(x,y表示某行,当y为$时,即表示从第x行打印至最后一行)
[root@Shell ~]# sed -n ‘1,3 p‘ employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
[root@Shell ~]# sed -n ‘3,$ p‘ employee.txt
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
修改地址范围可以使用逗号、加号和波浪号。
加号+配合逗号使用,可以指定相的若干行,而不是绝对的几行。如 n,+m 表示第 n 行开 始后的 m 行
波浪号~也可以指定地址范围。 它指定每次要跳过的行数。如 n~m 表示从第 n 行开始,每次 跳过 m 行:
1~2 匹配 1,3,5,7,…… (只打印奇数行)
2~2 匹配 2,4,6,8,……
1~3 匹配 1,4,7,10,…..
2~3 匹配 2,5,8,11,…..
匹配模式
sed可以根据行号来进行匹配,那么sed也可以根据文件中的内容来匹配打印
①单条件匹配
语法:sed -n ‘/word/ p‘ {input-file}
[root@Shell ~]# sed -n ‘/101/ p‘ employee.txt
101,John Doe,CEO
②打印首次内容匹配至某行的内容
语法:sed -n ‘/word/,x p‘ {input-file}(当x=$时,那么就直接匹配到最后一行)
[root@Shell ~]# sed -n ‘/102/,3 p‘ employee.txt
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
如果在第x行没有匹配到word,那么sed会在x行后去匹配,并打印。
③打印匹配两个word之间的行
语法:sed -n ‘/word1/,/word2/ p‘ {input-file}
[root@Shell ~]# sed -n ‘/102/,/104/ p‘ employee.txt
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
④ 打印匹配word的行和其后面的x行
语法:sed -n ‘/word/,+x p‘ {input-file}
[root@Shell ~]# sed -n ‘/102/,+2 p‘ employee.txt
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
四、删除行(命令d)
在前面的打印模式,我们用到的命令是p,那么如果要删除某行的时候我们应该使用的命令是d,接下来,就来了解一下删除行命令d的使用方法。
使用命令d删除的也只是模式空间里的内容,并不对源文件进行修改。
①默认使用删除命令d
因为sed默认匹配的是所有的行,所以在使用命令d的时候如果不指定地址范围,那么默认是会将模式空间的内容全部删除,即输出为空。
语法:sed ‘d‘ {input-file}
②只删除某行
语法:sed ‘x d‘ {input-file}
[root@Shell ~]# sed ‘2 d‘ employee.txt
101,John Doe,CEO
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
③删除指定范围行
语法:sed ‘x,y d‘ {input-file}(当y=$时,即从x行打印到最后一行)
[root@Shell ~]# sed ‘1,4 d‘ employee.txt
105,Jane Miller,Sales Manager
④与p命令相同,d命令也可以对word进行匹配
语法:sed ‘/word/ d‘ {input-file}
[root@Shell ~]# sed ‘/101/ d‘ employee.txt
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
我们不难看出其实d命令与p命令的用法基本相同。接下来介绍几个比较特殊的用法
⑤删除所有的空行
语法:sed ‘/^$/ d‘ {input-file}
[root@Shell ~]# sed -n ‘p‘ employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
[root@Shell ~]# sed ‘/^$/ d‘ employee.txt
101,John Doe,CEO
102,Jason Smith,IT Manager
103,Raj Reddy,Sysadmin
104,Anand Ram,Developer
105,Jane Miller,Sales Manager
⑥删除所有注释行(假设注释行是以#开头)
语法:sed ‘/^#/ d‘ {input-file}
五、把模式空间的内容写入到文件中(命令w)
w命令可以将当前模式空间的内容写入到文件中,其用法与p命令及d命令相同,都是在其指定的地址范围内操作。
例如:sed -n ‘2 w output.sed‘ employee.txt
上面语句的意思就是将employee.txt文件中的的第二行内容写入到output.sed文件中,其写入的本质是每次都将output.sed文件中的内容覆盖。
注:学习sed命令的参考书籍为《Sed&Awk》,所以笔记也都是参考该书。
+1
本文出自 “方外” 博客,请务必保留此出处http://xxpf09.blog.51cto.com/7240879/1795062
原文地址:http://xxpf09.blog.51cto.com/7240879/1795062