非交互的编辑器之sed

注:sed 是逐行处理的

sed文本处理工具的用法:

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

相关说明如下:

  • 条件可以是行号或者/正则/
  • 没有条件时,默认为所有条件
  • 指令可以是增、删、改、查等指令
  • 默认sed会将所有输出的内容都打印出来,可以使用-n屏蔽默认输出
  • 选项中可以使用-r选项,让sed支持扩展正则

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

sed命令的常用选项如下:

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

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

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

sed 的常用条件指令

    p 打印

    d 删除 

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


下面介绍一下具体的用法

 指令p

  

  1. [root@svr5 ~]# sed '1p' /etc/hosts 打印文件的第一行 但由于没有加-n选项所以默认会打印整个文件
  2. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  3. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  4. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

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

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

  1. [root@svr5 ~]# sed -n '3p;5p' /etc/passwd 打印第3和5行
  2. [root@svr5 ~]# sed -n '3,+10p' /etc/passwd 打印第3以及后面的10行
  3. [root@svr5 ~]# sed -n '1~2p' /etc/passwd 打印奇数行 【这里就是打印 1 1+2 1+2+2......】
  4. [root@svr5 ~]# sed -n '2~2p' /etc/passwd 打印偶数行
  5. [root@svr5 ~]# sed -n '$=' /etc/passwd 输出文件的行数
d 指令同p指令 测试时可不加-n选项可以直观看出效果


s/old/new/ 替换指令

  1. [root@svr5 ~]# vim test.txt             //新建素材
  2. 2017 2011 2018
  3. 2017 2017 2024
  4. 2017 2017 2017
  1. [root@svr5 ~]# sed 's/2017/xxxx/' test.txt 把每行的第一个2017替换成xxxx
  2. [root@svr5 ~]# sed 's/2017/xxxx/g' test.txt 把每行所有的2017替换成xxxx
  3. [root@svr5 ~]# sed 's/2017/xxxx/2' test.txt 把每一行的第二个2017替换成xxxx
  4. [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#】

  1. [root@svr5 ~]# cat nssw.txt 新建素材
  2. Hello the world
  3. ni hao ma beijing
  1. [root@svr5 ~]# sed 's/.//2 ; s/.$//' nssw.txt 删除文件中每行的第二个、最后一个字符分两次替换操作,第一次替换掉第2个字符,第二次替换掉最后一个字符
  1. [root@svr5 ~]# sed -r 's/^(.)(.*)(.)$/\3\2\1/' nssw.txt 将文件中每行的第一个、倒数第1个字符互换每行文本拆分为“第1个字符”、“中间的所有字符”、“倒数第1个字符”三个部分,然后通过替换操作重排顺序为“3-2-1”
  1. [root@svr5 ~]# sed 's/([A-Z])/[\1]/g' nssw.txt 为文件中每个大写字母添加括号使用 “()”可实现保留功能

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

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


 

猜你喜欢

转载自blog.csdn.net/majiangNB/article/details/80720669
今日推荐