sed-如何操作非交互式流编辑器

2019-04-18 17:53:01 7569

注:sed 是逐行处理的


sed文本处理工具的用法:


 


用法1:前置命令 | sed [选项] '条件指令'

用法2:sed [选项] '条件指令' 文件.. ..

相关说明如下:


条件可以是行号或者/正则/

没有条件时,默认为所有条件

指令可以是增、删、改、查等指令

默认sed会将所有输出的内容都打印出来,可以使用-n屏蔽默认输出

选项中可以使用-r选项,让sed支持扩展正则

下面是介绍一些选项和基本用法


 


sed命令的常用选项如下:


    -n(屏蔽默认输出,默认sed会输出读取文档的全部内容)


    -r(让sed支持扩展正则)/正则/


    -i(sed直接修改源文件,默认sed只是通过内存临时修改文件,源文件无影响)


sed 的常用条件指令


    p 打印


    d 删除 


    s/old/new/ 替换   也可用来做一些字符串的删除


 


下面介绍一下具体的用法


 指令p


  


[root@svr5 ~]# sed '1p' /etc/hosts 打印文件的第一行 但由于没有加-n选项所以默认会打印整个文件

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

 


[root@svr5 ~]# sed -n '1p' /etc/hosts 打印文件的第一行 (屏蔽默认输出)

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

                 01.                 [root@svr5 ~]# sed -n '3,5p' /etc/passwd 打印第3到5行


 


[root@svr5 ~]# sed -n '3p;5p' /etc/passwd 打印第3和5行

[root@svr5 ~]# sed -n '3,+10p' /etc/passwd 打印第3以及后面的10行

[root@svr5 ~]# sed -n '1~2p' /etc/passwd 打印奇数行 【这里就是打印 1 1+2 1+2+2......】

[root@svr5 ~]# sed -n '2~2p' /etc/passwd 打印偶数行

[root@svr5 ~]# sed -n '$=' /etc/passwd 输出文件的行数

d 指令同p指令 测试时可不加-n选项可以直观看出效果


 


s/old/new/ 替换指令


 


[root@svr5 ~]# vim test.txt             //新建素材

2017 2011 2018

2017 2017 2024

2017 2017 2017

[root@svr5 ~]# sed 's/2017/xxxx/' test.txt 把每行的第一个2017替换成xxxx

[root@svr5 ~]# sed 's/2017/xxxx/g' test.txt 把每行所有的2017替换成xxxx

[root@svr5 ~]# sed 's/2017/xxxx/2' test.txt 把每一行的第二个2017替换成xxxx

[root@svr5 ~]# sed 's/2017//2' test.txt 删除每一行的第二个2017

 


  下面介绍一下sed的一些正则用法


 


    [root@svr5 ~]#   sed -n   '/^root/p' /etc/passwd         找出以root开头的并打印


    [root@svr5 ~]#   sed  -n   '/bash$/p' /etc/passwd          找出以bash结尾的并打印


    [root@svr5 ~]#   sed    's#/bin/bash#/sbin/sh#'   /etc/passwd      将/bin/bash替换成/sbin/sh     【这里相当于s#old#new#】


 


[root@svr5 ~]# cat nssw.txt 新建素材

Hello the world

ni hao ma beijing

 

[root@svr5 ~]# sed 's/.//2 ; s/.$//' nssw.txt

删除文件中每行的第二个、最后一个字符分两次替换操作,第一次替换掉第2个字符,第二次替换掉最后一个字符

 

[root@svr5 ~]# sed -r 's/^(.)(.*)(.)$/\3\2\1/' nssw.txt 将文件中每行的第一个、倒数第1个字符互换

将每行文本拆分为“第1个字符”、“中间的所有字符”、“倒数第1个字符”三个部分,然后通过替换操作重排顺序为“3-2-1”

 

[root@svr5 ~]# sed 's/([A-Z])/[\1]/g' nssw.txt 为文件中每个大写字母添加括号使用 “()”可实现保留功能

注:1.正则的用法用法还有很多就不一 一列举了具体可以按实际的要求操作sed默认不支持扩展正则所以使用扩展正则时需加-r选项   


    2.建议在使sed修改文件是先不要加-i选项测试无误后方可加上-i选项


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

这条文档是否有帮助解决问题?

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: