文本处理小工具SED用法

时间:2022-02-05 08:35:17


  • SED是什么
    SED是Stream EDitor的缩写,也就是SED是一个流编辑器。它的处理方式和Gvim/emacs完全不一样。更多的是将SED用作文本处理而不是文本编辑。
  • SED用法说明
    一般linux系统都会内置SED命令。输入sed会打印出help信息。从help信息可以看到其用法如下:
  • sed [options]... 'command' files...

    sed的options说明:
    -n : 等效- -quiet,- -silent,静默模式,取消自动打印模式空间
    -e ‘expr’: 等效 - -expression= ‘expr’,将脚步表达式添加到运行列表。
    -f srcipt.f : 等效- -file= srcipt.f.添加脚本文件到运行列表
    -i: 等效- -in-place,直接修改文件
    -r: 脚步中开启扩展正则表达式支持
    上述为主要的选项说明,其他的选项可查看help得到详细信息。

  • SED处理原理
    SED以行为单位进行处理,当前处理的行存放在临时缓存区,称为模式空间(pattern space),sed依次处理模式空间内容,并输出到终端,如此循环直到处理完所有的行。
    为了只对感兴趣的行进行处理,需要使用定址,定址:定位到想要编辑的行,如1,5表示1到5行,/test/ 匹配到test的行。定址可以使用数字和正则表达式匹配并且可以混合使用。
  • SED支持的命令
    a\:当前行加入一行。eg
    sed '$a\\#this is the end' test.txt
    其中 ’$’匹配最后一行,‘\’使用需要进行转义。命令会在文件最后一行后添加注释’#this is the end’
    i\:当前行前加入一行。eg
    sed '1i\\#add a header' test.txt
    d:删除。eg
    sed '2,$d' test.txt
    除了第一行外,其他行被删除
    p:打印。默认sed会将模板空间打印到终端,因此使用’p’命令会打印两次。需要结合-n选项进入静默模式,则只打印定址的或匹配的行。
    s/re/sting: 替换命令,用string的字符串替换正则表达式re。
    g:行内全面替换。eg
    sed 's/PATH/path/g' test.txt
    将所有的PATH替换成path。
    r:读文件
    sed '1r include.h' include.c
    将文件include.h的内容添加到include.c的第一行下面。
    w:写文件
    sed '1w include.h' include.c
    将include.c的第一行写入到include.h。
  • SED常见元字符集
    ^:行首
    $:行尾
    .:任意一个字符
    *:0个或多个字符
    []:指定范围字符
    [^]::不在指定范围字符,取非操作
    (..):保存匹配字符
    &:搜索匹配字符串保存值。eg:
    s/david/hello & /
    将david替换为hello david
    \<:词首
    >:词尾
    x{m}:重复x字符m次。
    x{m,}:重复x字符最少m次。
    x{m,n}:重复x字符m~n次。