Skip to content

Linux sed

harryfyodor edited this page Jul 21, 2017 · 8 revisions

sedstream editor的简称,即流编辑器。一般来说是用来处理文本的。在使用的过程中会使用到大量的正则表达式。

本文会参考众多网上sed的教程,做一个记录和整合,当做自己今后的备忘录。

http://coolshell.cn/articles/9104.html

一些基本的认识

  1. 存在一个pattern space的空间,可以想象成一个暂存的空间。
  2. 匹配是一行一行匹配的,事实上是对进行匹配或操作。

添加的参数以及含义

-e 用选项中指定的script来处理,可以指定多个脚本 -f 用选项中制定的script文件来处理 -i 直接修改源文件 -n 不把pattern space的内容打印出来

命令

理解 /

s命令

s命令用于匹配。下面是常用的格式。

范围s/要匹配的字符串或者正则/要用于替换的字符串/模式
  • 范围:匹配的行的范围。默认全部,3,6则表示第三行到第六行。
  • 要匹配的字符串或者正则:匹配的部分,而如果使用s命令,则是后面需要被替换的部分
  • 要用于替换的字符串
  • 模式:常用模式是g,即全部匹配。如果是1,则表示匹配第一个。3g则表示从第三行开始到最后。

常用正则

  • ^表示以什么开头。
  • $表示以什么结尾。
  • \<>/ 表示以什么开头或者结尾的词。<\abc\>即严格匹配abc
  • .任何单个字符。
  • *出现0次或者多次。
  • \+出现1次或者多次。
  • \{m,n\}匹配前面符号出现m次到n次的词。
  • [^]指定不存在。

多个匹配和圆括号匹配

制定多个匹配方式,连续操作。

sed -e '1,3s/my/your/g' -e '3,$s/This/That/g' my.txt

圆括号匹配一般是为了修改格式。在后面的用于替换的字符串中可以使用\1之类的来代替前面括号匹配到的东西。

sed 's/This is my \([^,&]*\)\./\1/g' my.txt

其他命令

N命令

要记住sed匹配的单位是行。而N命令则可以把计数行和偶数行用\n结合起来,共同匹配。

sed 'N;s/my/your/' pets.txt

a命令

i命令

c命令

d命令

p命令

其他

打包命令

使用Pattern Space

Clone this wiki locally