经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » Linux/Shell » 查看文章
Linux三剑客命令—sed
来源:cnblogs  作者:JZEason  时间:2021/12/24 8:56:55  对本文有异议

一、概念说明

官方概念说明:

stream editor for filtering and transforming text
字符流过滤编辑和文本字符流转换工具

Linux sed 命令是利用脚本来处理文本文件。

sed 可依照脚本的指令来处理、编辑文本文件。

Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

二、sed功能作用说明

  • 处理文件信息

    • 文本文件信息(小文件)
    • 日志文件信息
    • 配置文件信息
  • 处理文件方式

    • 增加信息
    • 删除信息
    • 修改信息
    • 查找信息

三、sed语法原理

3.1 命令语法格式

标准格式:

  1. sed [选项] [sed指令] [文件信息]
  2. sed [参数] '处理规则' [操作对象]
  3. ...
相关参数 参数说明
-e 允许多项编辑
-n 取消默认输出
-i 就地编辑
-r 支持拓展正则
-f 指定sed匹配规则脚本

举例说明:

  1. sed -i 's#oldboy#oldgirl#g' oldboy.txt
  2. 命令参数: -i
  3. 命令指令: s
  4. 指令修饰: g

相同指令信息只能使用一次,想使用多次需要加上分号

sed四种定位模式如下:

  1. 1、数字定位法
  2. eg:指定行号
  3. sed '3d' [文件信息]
  4. sed '2,3d' [文件信息]
  5. 2、正则定位法
  6. eg:指定正则定位
  7. sed '/^g/d' [文件信息]
  8. 3、数字和正则定位法
  9. sed '3,/^g/d' [文件信息]
  10. 4、正则和正则定位法
  11. sed '/^g/,/^j/d' [文件信息]

sed的编辑模式指令汇总如下:

  1. d :删除
  2. p :打印
  3. a : 在当前行后添加一行或多行
  4. sed '2axxx' [文件信息]
  5. c :用新文本修改(替换)当前行
  6. sed '2cxxx' [文件信息]
  7. i : 在当前行之前,插入文本(单独使用时)
  8. sed '2ixxx' [文件信息]
  9. r : 在文件中读内容
  10. sed '2r r.txt' [文件信息]
  11. w : 将指定行写入文件
  12. sed '2w w.txt' [文件信息]
  13. y : 将字符转换成另一个字符
  14. sed '2y/fa/FA/' [文件信息]
  15. s : 将字符串转换成另一个字符串(每一行只替换一次)
  16. sed 's/11/22/' [文件信息]
  17. g : 全部执行
  18. sed 's/11/22/g' [文件信息]
  19. i : 忽略大小写(跟 s 模式一起使用时)
  20. & :代表前面匹配到的内容

3.2 命令执行过程

image

四、sed实践操作

4.1 实践环境搭建

  1. cat >person.txt<<EOF
  2. 101,oldboy,CEO
  3. 102,zhaoyao,CTO
  4. 103,Alex,COO
  5. 104,yy,CFO
  6. 105,feixue,CIO
  7. EOF

4.2 命令操作实践

  1. 查询实践

    • 单行查找

      1. 打印模式空间内容:p
      2. 取消默认输出信息:-n

      最终命令执行信息:

      1. 按照行号查找: sed -n '1p' person.txt
      2. 按照信息查找: sed -n '/oldboy/p' person.txt
    • 多行查找

      按照连续的多行查找:

      1. 按照行号查找: sed -n '1,3p' person.txt
      2. 按照信息查找: sed -n '/oldboy/,/yy/p' person.txt

      按照不连续的多行查找:

      1. 按照行号查找: sed -n '1p;3p' person.txt
      2. 按照信息查找:
      3. sed -nr '/101|103|104/p' person.txt
      4. sed -n '/101/p;/104/p' person.txt
  2. 增加实践

    • 按照行号增加

      1. 文件追加信息指令(行后): a---append
      2. 文件插入信息指令(行前): i---insert

      最终命令执行信息:

      1. sed '$a106\n107' person.txt
      2. sed '2a106\n107' person.txt
    • 按照信息增加

      1. sed '/oldboy/a106\n107' person.txt
  3. 删除实践

    • 单行删除

      1. 删除文件信息指令: d---delete
      2. i---input

      sed -i.bak:-i参数必须写在所有参数最后面

      最终命令执行信息:

      1. 按照行号删除: sed '1d' person.txt
      2. 按照信息删除: sed '/oldboy/d' person.txt

      删除文件空行信息:

      1. sed '/^$/d' person.txt
      2. sed -n '/^$/!p' person.txt
    • 多行删除

      1. 按照行号删除: sed '1,3d' person.txt
      2. 按照信息删除: sed '/oldboy/,/yy/d' person.txt
  4. 替换实践

    • 文本替换

      1. 编辑文件信息参数: i
      2. 替换文件信息指令: s c
      3. 按行进行信息替换: g (否则只替换每行匹配的第一个信息)

      最终命令执行信息:

      1. 替换文件信息: sed -i.bak 's#oldboy#oldgirl#g' person.txt
    • 反向引用

      1. 扩展正则识别参数: -r
      2. 调用正则匹配信息: &

      最终命令执行信息:

      1. 替换文件信息:
      2. sed -r 's#(.*)#<\1>#g' person.txt
      3. sed -r 's#.*#<&>#g' person.txt
      4. echo 123456|sed -r 's#[1-6]{1}#<&>#g'
      5. echo 123456|sed -r 's#.#<&>#g'
    • 相关案例

      1. 1、将nginx.conf中的注释行全部去掉
      2. [root@localhost ~]# sed '/^ *#/d' /etc/nginx/nginx.conf
      3. 2、将nginx.conf中每一行之前增加注释
      4. [root@localhost ~]# sed 's/.*/# &/g' /etc/nginx/nginx.conf
      5. 3、要求一键修改本机的ip
      6. 192.168.15.100 ---> 192.168.15.101
      7. 172.16.1.100 ---> 172.16.1.101
      8. sed -i 's#.100#.101#g' /etc/sysconfig/network-scripts/ifcfg-eth[01]
      9. 4、将/etc/passwd中的root修改成ROOT
      10. sed -i 's#root#ROOT#g' /etc/passwd
  5. 拓展实践

    1. 修饰指定信息取反: sed -n '/^$/!p' person.txt
    2. 取出文件行号信息: sed '=' person.txt
    3. 执行多个相同指令: sed -n '1p;3p;5p' person.txt

原文链接:http://www.cnblogs.com/JZjuechen/p/15717100.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号