1. 缩写

sedstream editor的缩写。

2. 常用选项

  1. -i,原地修改输入文件

3. 常见使用场景

3.1 替换某个文本的所有出现

使用方法为sed 's/<word1>/<word2>/g' input.txt

  1. s指substitution(替换)

  2. /是分隔符,也可以是其他字符作分隔符,如+

  3. <word1>是被替换的字符串

  4. <word2>是要替换为的字符串

  5. g表示global(全局替换),不指定g的话只会替换每一行的第一次出现的<word1>

3.2 删除指定行

行编号都是从1开始

  • sed '<n>d' input.txt,删除第<n>

  • sed '$d' input.txt,删除最后一行

  • sed '<start>,<end>d' input.txt,删除第<start><end>行(闭区间)

4. sed的正则表达式

sed默认使用Basic Regular Expression(BRE)语法,如果指定了-E或者-r或者--regexp-extended选项则使用Extended Regular Expression(ERE)语法。

BRE和ERE的唯一区别在于这些特殊字符的行为:?, +, (, ),{, },|。在BRE中它们直接使用就是普通字符,加上\前缀之后才是特殊的元字符;而在ERE中正好相反,直接使用是元字符,加上\前缀变成普通字符。

Basic Regular Expression(BRE)语法常用规则如下:

  1. <char>,普通字符<char>匹配自身

  2. *,匹配0次或多次前面的项(单个普通字符,单个位于\后的特殊字符,单个.,单个grouped regexp,或者单个方括号表达式)

  3. \+,类似*,但匹配1次或多次

  4. \?,类似*,但匹配0次或1次

  5. .,匹配任意单个字符,包括newline

  6. ^,表示行的开头

  7. $,表示行的结束

  8. [<list>],匹配<list>中的任意单个字符,<list>也可以包括char1-char2用于指定其中的所有字符(闭区间),<list>中也可以包括字符类(如[:blank:]表示空字符,即空格和tab)

  9. [^<list>],类似[<list>],但匹配不在<list>中的任意单个字符

  10. \(<regexp>\),将<regexp>当做一个整体,构成一个grouped regexp(使用举例:整体应用*操作符等)

  11. <regexp1>\|<regexp2>,匹配<regexp1>或者<regexp2>

  12. <regexp1><regexp2>,匹配<regexp1><regexp2>的连接

  13. \n,匹配newline

  14. \<char>,匹配特殊字符<char><char>可以是$, *, ., [, \, ^

5. 参考

  1. GNU sed文档

  2. GNU sed正则表达式

  3. GNU sed BRE语法