加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

sed命令详解

发布时间:2020-12-13 23:17:25 所属栏目:Linux 来源:网络整理
导读:Sed命令详解 1. 简介 sed是一种在线编辑器、行编辑器,一次处理一行内容,在处理时,把当前的行存储到临时缓冲区中,该缓冲区称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完毕后,把缓冲区的内容送到标准输出;然后紧接着去处理下
Sed命令详解

1. 简介
sed是一种在线编辑器、行编辑器,一次处理一行内容,在处理时,把当前的行存储到临时缓冲区中,该缓冲区称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完毕后,把缓冲区的内容送到标准输出;然后紧接着去处理下一行,重复完成相同的操作,直至文件末尾;sed处理的整个过程中,对象文件中的内容并没有改变,除非使用重定向来存储处理后的结果。sed主要用来自动编辑一个或多个文件,简化文件的反复操作过程。
流程如下图:


2. sed命令功能
sed [OPTION]... {script-only-if-no-other-script} [input-file]...

  • 常用选项:
    -n:表示不输出模式空间中内容至屏幕
      -e script1 -e script2 -e script3:多点编辑
      -f /path/to/script_file:从指定的文件中读取脚本并运行
      -i:直接修改源文件
      -r:支持扩展正则表达式
  • script:地址定界 编辑命令
    1.地址定界
    (1)空地址:对全文进行处理
    (2)单地址:
    #:指定行
    /pattern/:指此模式所匹配到每一行
    (3)地址范围:
    #,#:表示数字,指定行
    $:最后一行
    #,/regexp/:从#开始,到第一次被/regrexp/所匹配到的行结束,中间的所有行
    /regexp1/,/regexp2/:从第一次被/regexp1/所匹配到的行开始,到第一次被/regexp2/匹配到的行结束,中间所有的行
    (4)步进:
    1~2:所有奇数行
    2~2:所有偶数行
    2.编辑命令:
    d:删除模式空间的行
    p:显示模式空间的内容
    atext:在行后面追加文本,支持使用n实现多行追加
    i text:在行前面插入文本,支持使用n实现多行插入
    ctext:用text替换匹配到的行
    w /path/to/somefile:把指定内容另存至/path/to/somefile路径所指定的文件中
    r /path/tp/somefile:在文件的指定位置插入另一个文件的所有内容,完成文件合并br/>=:为模式空间中的行打印行号
    s/regexp/replacement/:替换由regexp所匹配到内容为replacement
    (支持使用其他分隔符如[email?protected]@@,s###;条件是该分隔符在后面的模式中
    没有出现过),对于替换还有2个后选项g和i,分别表示如下:
    g:全局替换
    i:不区分大小写
    3.常用命令功能演示:
    (1)显示/etc/fstab第3行内容:
    sed -n ‘3p‘ /etc/fstab
    (2)显示/etc/fstab第3至6行内容:
    sed -n ‘3,6p‘ /etc/fstab
    (3)显示/etc/fstab奇数行内容:
    sed -n ‘1~2p‘ /etc/fstab
    (4)显示/etc/fstab的最后一行
    sed -n ‘$p‘ /etc/fstab
    (5)删除/boot/grub2/grub.cfg文件中所有行的行首的空白字符
    sed ‘s/^[[:space:]]+//g‘ /boot/grub2/grub.cfg
    (6)删除/boot/grub2/grub.cfg文件中所有以#开头,后跟至少一个空白字符的行的行首的#和空白字符:
    sed ‘s/^#[[:space:]]+//g‘ /boot/grub2/grub.cfg
    (7)把/tmp/grub.cfg的文件的奇数行另存为/tmp/grub.cfg3
    sed ‘1~2w /tmp/grub.cfg3‘ /tmp/grub.cfg
    (8)echo一个文件路径取出其基名,进一步取出其路径名
    如:取出路径名:echo "/etc/sysconfig/network-scripts/" | sed -r ‘[email?protected][^/]+/[email?protected]@‘
    取出基名:echo "/etc/sysconfig/network-scripts/" | sed ‘[email?protected]^.*/([^/]+)/[email?protected][email?protected]
    4.sed的高级用法sed除了模式空间(pattern space)还有一个"hold space"的内存空间,称之为保持空间高级编辑命令:h:用模式空间中的覆盖保持空间的内容H:把模式空间中的内容追加至保持空间中的内容的后面g:从保持空间的取到的内容,并将其覆盖模式空间中的内容G:从保持空间中取到的内容,并将其追加在模式空间中的内容的后面x:把保持空间和模式的内容进行互换n:读取匹配到的行的下一行至模式空间,(会覆盖模式空间中的原有内容)N:读取匹配到的下一行至模式空间,追加在模式空间中原有内容的后面d:删除模式空间的内容D:删除多行模式空间中的首行注意:命令功能可使用!取反,分号可用于分隔脚本示例:sed -n ‘n;p‘ FILE:显示偶数行sed ‘1!G;h;$!d‘ FILE:逆序显示文件sed ‘$!d‘ FILE:取出最后一行sed ‘$!N,$!D‘ FILE:显示最后两行sed ‘/^$/d;G‘ FILE:保证指定的文件每一行后有且仅有一个空白行sed ‘n;d‘ FILE:显示奇数行sed ‘G‘:在文件中的每行都加空白行

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读