sed

sed

  • sed 是非交互式的编辑器。它不会修改文件,除非使用 shell 重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。
  • sed 编辑器逐行处理文件(或输入),并将结果发送到屏幕。具体过程如下:

    • 首先 sed 把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),
    • 然后处理临时缓冲区中的行,
    • 完成后把该行发送到屏幕上。
  • sed 每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed 便结束运行. sed 把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。

  • 如果要修改原文件,可使用-i 选项。

示例

1. 将文本内容列出并打印行号,删除某些行

1
$ nl regular_express.txt | sed '2,5d'

其中,’2,5d’ 表示 2~5 行,d 表示删除。

删除第三行到最后一行, $定位到最后一行:

1
$ nl regular_express.txt | sed '3,$d'

原文件中删除第 1 行:

1
$ sed -i '1d' regular_express.txt

2. a表示在行后加上字符串,i表示在行前添加字符串

在第二行后添加 test 字符串:

1
$ nl regular_express.txt | sed '2a test'

在第二行前添加 test 字符串:

1
$ nl regular_express.txt | sed '2i test'

在第二行后加入两行 test,“\n”表示换行符:

1
$ nl regular_express.txt | sed '2a test\ntest'

3. 将 2-5 行内容取代为 No 2-5 number

c 为替换内容选项。

1
$ nl regular_express.txt | sed '2,5c NO 2-5 number'

4. 列出 regular_express.txt 内第 5-7 行

sed 命令中-n 为安静模式选项:

1
$ nl regular_express.txt |sed -n '5,7p'

5. 替换字符串

sed ‘s/被替换字符串/新字符串/g’