文本三剑客之sed流编辑器的用法

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、Sed编辑器

1、Sed概述

  • sed编辑器时一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
  • sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要存储在一个命令文本文件中。
  • 2、Sed工作流程

    sed 的工作流程主要包括读取、执行和显示三个过程: 读取:sed 从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区中(又称模式空间,pattern space)。 执行:默认情况下,所有的sed 命令都在模式空间中顺序地执行,除非指定了行的地址,否则sed 命令 将会在所有的行上依次执行。 显示:发送修改后的内容到输出流。在发送数据后,模式空间将会被清空。

    注意:

    3、Sed基本用法

    sed -e '操作' 文件1 文件2
     
    sed -n -e '操作' 文件1 文件2 
     
    sed -f 脚本文件 文件1 文件2 
     
    sed -i -e '操作' 文件1 文件2
    

    4、Sed常用选项

    选项说明
    -e 或 - -expression=多点编辑
    -h 或- -help显示帮助
    -f 或- -file=表示用指定的脚本文件来处理输入的文本文件
    -n不输出模式空间内容到屏幕,即不自动打印,加p,又恢复自动打印
    -i备份文件文件并原处编辑
    -r使用扩展正则表达式

    5、sed命令的常用操作

    选项作用
    s替换,替换指定字符
    d删除,删除选定的行。
    a增加,在当前行下面增加一行指定内容。
    i插入,在选定行上面插入一行指定内容。
    c替换,将选定行替换为指定内容。
    y字符转换,转换前后的字符长度必须相同。
    p打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容; 如果有非打印字符,则以 AscII码输出。其通常与_n"选项一起使用。
    =打印行号。
    l打印数据流中的文本和不可打印的ASCII字符(比如结束符s、制表符\t)

    二、Sed命令使用

    (1)查看显示内容的方式

    1、打印全部内容

    sed  ’交互模式输入一行,自动打印一行相同的
    
    sed -n   交互模式输入一行,关闭自动打印
    
    sed -n  p’加上p又恢复自动打印
    
    [root@localhost data]# cat ceshi.sh 
    11
    22
    33
    44
    55
    66
    

    在这里插入图片描述

    [root@localhost data]# sed 'p' ceshi.sh 
    11
    11
    22
    22
    33
    33
    44
    44
    55
    55
    66
    66
    

    在这里插入图片描述

    2、查看文件,打印全部内容

    [root@localhost data]# sed ' ' /etc/fstab 
    

    在这里插入图片描述

    [root@localhost data]# sed -n ' p' /etc/fstab
    

    在这里插入图片描述
    3、打印指定行内容

    [root@localhost data]# sed -n ' 6p' /etc/fstab  ##打印此文件第六行
    

    在这里插入图片描述

    4、根据地址,打印指定多行内容

    [root@localhost data]# ifconfig ens33|sed -n '2,4p' ##打印2到4行
    

    在这里插入图片描述

    ###打印2行加4行,就是打印第二行到第6行
    [root@localhost data]# cat -n /etc/passwd|sed -n '2,+4p'
    

    在这里插入图片描述
    5、打印多行后退出

    [root@localhost data]# sed  '4q' /etc/passwd
    

    在这里插入图片描述
    6、打印最后一行,使用通配符$

    [root@localhost data]#sed -n '$p' /etc/passwd
    

    在这里插入图片描述
    7、支持正则表达式

    #查找基本格式:
    sed -n '//,//p' 文件名
    第一个//表示开头位置,第二个//表示结尾位置
    
    [root@localhost data]sed -n '/^r/,/^f/p' /etc/passwd
    

    在这里插入图片描述

    8、过滤关键字

    [root@yxp opt]#sed -n '/root/p' /etc/passwd   ###和grep功能差不多
    

    在这里插入图片描述
    9、‘#,/关键字/p’ 从第#行开始匹配

    [root@localhost data]# sed -n '2,/root/p' /etc/passwd
    

    在这里插入图片描述

    10、‘/关键字/,#’ 找到第#个关键字为止

    [root@localhost data]# sed -n '/root/,3p' /etc/passwd
    

    在这里插入图片描述
    11、打印文本的奇数和偶数行。

    [root@localhost data]# seq 10 |sed -n '1~2p'
    

    在这里插入图片描述

    [root@localhost data]# seq 10 |sed -n '1~2p'
    

    在这里插入图片描述

    [root@localhost data]#seq 10 |sed  '1~2d'
    

    在这里插入图片描述

    [root@localhost data]#seq 10 |sed  '1~2d'
    

    在这里插入图片描述

    (2)删除内容

    1、删除指定行

    #删除指定行并不是真正删除,只是将删除了的结果显示出来,并不是真正删除了
    [root@localhost data]# cat ceshi.sh |sed '3d'
    

    在这里插入图片描述

    2、删除指定的多行

    [root@localhost data]# sed '2,4d' ceshi.sh 
    

    在这里插入图片描述
    3、删除文本中的空行

    [root@localhost data]# sed '/^$/d' ~/data/ceshi.txt
    

    在这里插入图片描述

    4、 删除以指定字符结尾的行并取反。

    [root@localhost data]# sed '/nologin$/!d' /etc/passwd
    

    在这里插入图片描述
    5、先备份内容再删除

    [root@localhost data]# sed -i.test '3d' ceshi.txt 
    [root@localhost data]# cat ceshi.txt 
    1
    2
    51231
    5443
    45
    222
    333
    444
    [root@localhost data]# cat ceshi.txt.test 
    1
    2
    33
    51231
    5443
    45
    222
    333
    444
    
    

    在这里插入图片描述

    (3)插入内容

    1、在指定行后插入

    [root@localhost data]# cat ceshi.txt
    1
    2
    51231
    5443
    45
    222
    333
    444
    [root@localhost data]# sed -i '2a hehe' ceshi.txt
    [root@localhost data]# cat ceshi.txt
    1
    2
    hehe
    51231
    5443
    45
    222
    333
    444
    

    在这里插入图片描述
    *2、插入空行,修改文件的换行,要多加一个*

    [root@localhost data]# cat ceshi.txt
    1
    2
    hehe
    51231
    5443
    45
    222
    333
    444
    [root@localhost data]# sed -i '2a\\n konghang' ceshi.txt
    [root@localhost data]# cat ceshi.txt
    1
    2
    
     konghang
    hehe
    51231
    5443
    45
    222
    333
    444
    [root@localhost data]#
    

    在这里插入图片描述
    3、整行替换

    [root@localhost data]# sed -i '2c66666666666666' ceshi.txt
    [root@localhost data]# cat ceshi.txt
    1
    66666666666666
     konghang
    
     konghang
    hehe
    51231
    5443
    45
    222
    333
    444
    [root@localhost data]# 
    

    在这里插入图片描述
    4、使用"!"取反

    [root@localhost data]# seq 10|sed -n '2!p'
    1
    3
    4
    5
    6
    7
    8
    9
    10
    
    

    在这里插入图片描述

    5、搜索字符串并替代

    格式:格式:sed 行范围 s/旧字符串/新字符串/替换标记
    
    操作项作用
    数字表明新字符串将替换第几处匹配的地方
    g表明新字符串将会替换所有匹配的地方
    p打印与替换命令匹配的行,与 -n 一起使用
    w将替换的结果写到文件中

    在这里插入图片描述


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值