sed Ⅰ

Linux中,除了VI这种交互式的文本编辑器(interactive text editor),还有两个命令行文本编辑器(command line editor),就是sedgawk,本文介绍sed命令。

sed

sed是stream editor,流编辑器。其处理流程:

  1. 每次从输入流中读取一行数据
  2. 将数据交给指定的命令处理
  3. 根据命令改变数据
  4. 将数据输出到STDOUT

当一行数据处理完成,就读取下一行数据重复这个过程,直到所有的数据处理完成。

sed命令语法:

sed options script file

options参数有:

Option Description
-e script 使用指定的多个命令来处理数据
-f file 使用指定文件中的命令来处理数据
-n 不产生输出,直到使用print命令

script参数只能指定一个命令,如果需要多个命令需要使用-e option,或者使用-f option。

使用一个命令

sed默认处理STDIN输入流中的数据,所以可以使用管道(pipe):

$ echo "This is a test" | sed 's/test/big test/'
This is a big test

s命令(substitute):文件替换,使用big test替换test,注意三个斜线。

处理指定文件

$ cat data1.txt
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.
The quick brown fox jumps over the lazy dog.

$ sed 's/dog/cat/' data1.txt
The quick brown fox jumps over the lazy cat.
The quick brown fox jumps over the lazy cat.
The quick brown fox jumps over the lazy cat.
The quick brown fox jumps over the lazy cat.

sed不修改原文件内容,只是将处理的结果发送到STDOUT,所以data1.txt的内容不会改变。

使用多个命令

使用-e option来指定多个命令。

$ sed -e 's/brown/green/; s/dog/cat/' data1.txt
The quick green fox jumps over the lazy cat.
The quick green fox jumps over the lazy cat.
The quick green fox jumps over the lazy cat.
The quick green fox jumps over the lazy cat.

多个命令之前要用分号间隔开,并且分号前不能有空格

除了使用分号,还可以使用secondary prompt:

$ sed -e '
> s/brown/green/
> s/fox/elephant/
> s/dog/cat/' data1.txt
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.

当输入了第一个单引号后,bash会开启secondary prompt,直到出现第二个单引号,当出现第二个单引号,必须输入后续完整的命令参数,因为该行结束,bash就会执行命令。

从文件中读取命令

如果有很多的sed命令,可以将命令写在文件中,然后使用-f option来指定该文件。

$ cat script1.sed
s/brown/green/
s/fox/elephant/
s/dog/cat/

$ sed -f script1.sed data1.txt
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.
The quick green elephant jumps over the lazy cat.

将sed使用的命令所在文件的后缀标识为.sed,方便识别。另外,命令不需要使用分号间隔,每个命令一行即可。


参考:Linux Command Line and Shell Scripting Bible 3rd Edition 第19章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 12,256评论 2 33
  • 本文承接之前写的三十分钟学会AWK一文,在学习完AWK之后,趁热打铁又学习了一下SED,不得不说这两个工具真的堪称...
    mylxsw阅读 4,421评论 3 74
  • Linux 中可以使用强大的编辑器如 vim 和 emacs 来编辑文本文件。但有时候,我们只是需要自动的处理文本...
    shenzhenboy阅读 582评论 0 0
  • 基础命令 主要的命令和快捷键 Linux系统命令由三部分组成:cmd + [options]+[operation...
    485b1aca799e阅读 1,133评论 0 0
  • 知识点 sort uniq cut wc sed命令 awk命令 crontab定时器 sort sort 命令对...