sed命令-基本语法和命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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}

[[email protected] ~]# 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}

[[email protected] ~]# 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表示某行)

[[email protected] ~]# sed -n ‘2 p‘ employee.txt 

102,Jason Smith,IT Manager

②打印第x行到第y行

语法:sed -n ‘x,y p‘ {input-file}(x,y表示某行,当y为$时,即表示从第x行打印至最后一行)

[[email protected] ~]# sed -n ‘1,3 p‘ employee.txt 

101,John Doe,CEO

102,Jason Smith,IT Manager

103,Raj Reddy,Sysadmin

[[email protected] ~]# 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}

[[email protected] ~]# sed -n ‘/101/ p‘ employee.txt 

101,John Doe,CEO

②打印首次内容匹配至某行的内容

语法:sed -n ‘/word/,x p‘ {input-file}(当x=$时,那么就直接匹配到最后一行)

[[email protected] ~]# 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}

[[email protected] ~]# 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}

[[email protected] ~]# 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}

[[email protected] ~]# 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行打印到最后一行)

[[email protected] ~]# sed ‘1,4 d‘ employee.txt 

105,Jane Miller,Sales Manager

④与p命令相同,d命令也可以对word进行匹配

语法:sed ‘/word/ d‘ {input-file}

[[email protected] ~]# 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}

[[email protected] ~]# 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

[[email protected] ~]# 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命令-基本语法和命令的主要内容,如果未能解决你的问题,请参考以下文章

Linux基本命令之sed

sed命令的基本使用

shell--grep命令+正则表达式+基本语法

sed 操作命令

linux之文本内容替换命令sed

Linux基本命令