码迷,mamicode.com
首页 > 其他好文 > 详细

sed命令(1)-基本语法和命令

时间:2016-07-01 23:04:30      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:sed   语法   基本命令   

注:学习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

sed命令(1)-基本语法和命令

标签:sed   语法   基本命令   

原文地址:http://xxpf09.blog.51cto.com/7240879/1795062

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!