zoukankan      html  css  js  c++  java
  • 五、sed命令

    1.概述

    • sed(Streram editor),它是一个将一系列编辑命令作用于一批文本文件的理想工具。
    • awk,是一种能够对结构化数据进行操作,并产生格式化报表的编程语言。

    2.sed命令基本用法

    • 定义

      sed是一个非交互式文本编辑起,它可以对文本文件和标准输入进行编辑。

    • 作用方式

      sed从文本的一个文本行或标准输入中读取数据,将其复制到缓冲区,然后读取命令行或脚本的第一个命令,对此命令要求的行号进行编辑,重复此过程,直到命令行或脚本中的所有命令都执行完毕。

    • 说明

      标准输入可以是来自键盘输入、文件重定向、字符串、变量,甚至来自于管道的文本。

    • sed适用的场合

      • 编辑相对交互式文本编辑器而言太大的文件
      • 编辑命令太复杂,在交互式文本编辑器中难以输入的情况
      • 对文件扫描一遍,但是需要执行多个编辑函数的情况
    • sed的作用范围

      sed只是对缓冲区中原始文件的副本进行编辑,并不编辑原始的文件。

      保存改动的内容时,需要将输出重定向到另一个文件:

      sed 'sed命令' input-file > result-file
      
    • 调用sed的方式

      1. shell命令行

        sed [选项] 'sed命令' 输入文件
        # sed命令需要用单引号引起来
        
      2. 将sed命令插入脚本文件后,然后通过sed命令调用它

        sed [选项] -f sed的脚本文件 输入文件
        
      3. 将sed命令插入脚本文件后,设置该脚本文件为可执行,然后直接执行该脚本文件

        ./sed的脚本文件 输入文件
        
        • 说明

          此种方式的脚本文件需要以(#!)符号开头,(#!)后面是解析这个脚本的程序名。

      4. 说明

        以上几种方式,如果没有指定输入文件,sed将从标准输入中接受输入。

    • sed选项及其意义

      选项 意义
      -n 不打印所有行到标准输出
      -e 表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令给sed,-e选项可以省略
      -f 表示正在调用sed脚本文件
    • sed命令的组成

      sed命令通常由定位文本行和sed编辑命令两部分组成,sed编辑命令对定位文本行进行各种处理。

      • 定位文本行(两种方式)

        • 使用行号,指定一行,或指定行号范围
        • 使用正则表达式
        选项 意义
        x x为指定行号
        x,y 指定从x到y的行号范围
        /pattern/ 查询包含模式的行
        /pattern/pattern/ 查询包含两个模式的行
        /pattern/,x 从与pattern的匹配行到x号行之间的行
        x,/pattern/ 从x号行到与pattern的匹配行之间的行
        x,y! 查询不包括x和y行号的行
      • sed编辑命令

        sed编辑命令标识对文本进行何种处理

        选项 意义
        p 打印匹配行
        = 打印文件行号
        a 在定位行号之后追加文本信息
        i 在定位行号之前插入文本信息
        d 删除定位行
        c 用新文本替换定位文本
        s 使用替换模式替换相应模式
        r 从另一个文件中读文本
        w 将文本写入到一个文件
        y 变换字符
        q 第一个模式匹配完成后退出
        l 显示与八进制ASCII码等价的控制字符
        {} 在定位行执行的命令组
        n 读取下一个输入行,用下一个命令处理新的行
        h 将模式缓冲区的文本复制到保持缓冲区
        H 将模式缓冲区的文本追加到保持缓冲区
        x 互换模式缓冲区和保持缓冲区的内容
        g 将保持缓冲区的内容复制到模式缓冲区
        G 将保持缓冲区的内容追加到模式缓冲区

    3.sed案例

    #打印input文件的第3~6行
    sed -n '3,6p' input
    
    #使用匹配模式
    sed -n '/certificate/p' input
    
    #带多个编辑命令sed的一般格式为:
    sed [选项] -e 编辑命令1 -e 编辑命令2 ... -e 编辑命令n 输入文件
    
    # 编写和调用sed脚本文件
    #! /bin/sed -f
    /file:/a
    add content...
    
    - 说明
    -- 如果追加上去的文本有多行,需要用反斜杠符号""换行
    
    • 替换文本

      • 语法

        s/被替换的字符串/新字符串/[替换选项]
        
      • 替换选项

        选项 意义
        g 表示替换文本中所有出现被替换字符串之处
        p 与-n选项结合,只
        w 文件名 表示将输出定向到一个文件
      • 示例

        # 默认情况下,sed s命令将替换后的全部文本都输出
        # 如果要求只打印替换行,需要结合使用-n和p选项
        
        sed -n 's/被替换的字符串/新字符串/p' 输入文件
        
        # sed替换命令在默认情况下,即不带g选项时,对某行的第1处匹配关键字进行替换后,就跳转到下面匹配行
        # g选项使得sed替换命令对某行的所有关键字都进行替换
        
        # sed替换文本命令还可指定替换第几次匹配的关键字,只需在替换选项加上相应的数字即可,数字范围需要在1~512之间
        
        sed -n 's/xxx/xxx_new/2p' # 替换第2次匹配的关键字
        
    • 其他

      &符号可用来保存被替换的字符串以供调用

      sed -n 's/seu/(&)/pg' input
      >>>等同于 
      sed -n 's/seu/(seu)/pg' input 
      
  • 相关阅读:
    Redis简介 安装 注册服务
    Supervisor Linux守护进程
    .Net5 控制台 读取配置文件+依赖注入
    Linux Gdip
    Net Core封装 踩坑
    Apollo 公共Namespace使用json
    Visual Studio 2019修改项目名
    【面向对象】--静态类与非静态类的区别
    win10设置默认中英文符号【程序员标配】
    MySQL 数据库访问驱动-版本问题
  • 原文地址:https://www.cnblogs.com/nuochengze/p/14417940.html
Copyright © 2011-2022 走看看