Linux命令 - sed


sed是什么

sed是stream editor的简称,也就是流编辑器。它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,不断重复,直到文件末尾。文件内容不会改变,除非使用重定向输出。

使用方法

1
sed [option] 'command' filename

常用option:

-n 或–quiet或–silent 仅显示script处理后的结果.

-e ‘脚本’或–expression=脚本 以选项中指定的script来处理输入的文本文件。

-f <script文件>或–file=<script文件> 以选项中指定的script文件来处理输入的文本文件。

-r 让sed命令支持扩展的正则表达式(默认是基础正则表达式)。

动作说明:

a: 新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)。

c: 取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行。

d: 删除

i: 插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行)。

p: 打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行

s: 取代,可以直接进行取代的工作。通常这个 s 的动作可以搭配正则表达式

常用命令

  • 插入

    1
    2
    3
    4
    5
    6
    7
    # 在第一行前添加字符串
    sed '1i\添加的内容' file
    # 在最后一行行前添加字符串
    sed '$i\添加的内容' file
    # 在最后一行行后添加字符串
    sed '$a\添加的内容' file

  • 替换

    1
    2
    3
    4
    5
    6
    7
    # 注释掉含有“swap”的行
    sed -i 's/^[^#].*swap*/#&/g' fstab

    # 取消含有字符串swap的行最前面的注释符号#
    ## //两杠表示空格,以空格替换#,等价取消#。
    sed -i '/^#.*swap/s/^#//g' fstab

  • 删除

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    # 删除第2行
    sed '2d' filename
    # 删除1-4行
    sed '1,4d' filename
    # 删除1行和后2行,共3行
    sed '1,+2d' filename
    # 删除匹配到Coder的行和其后面的2行
    sed '/Coder/,+2d' filename
    # 删除奇数行
    sed '1~2d' filename
    # 删除偶数行
    sed '2~2d' filename
    # 删除匹配Coder的行
    sed '/Coder/d' filename
    # 删除所有空行
    sed '/^$/d' filename

  目录