美文网首页Linux命令 ‖笔记Linux
linux之文本内容替换命令sed

linux之文本内容替换命令sed

作者: 每天进步一点点变成更好的自己 | 来源:发表于2022-03-01 12:07 被阅读0次

    sed简介:流编辑工具,用来对文本进行过滤与替换操作。

    sed流程:sed通过一次仅读取一行内容来对某些指令进行处理后输出。

    1、sed通过文件或管道读取文件内容,但sed默认并不直接修改源文件,而是将读入的内容复制到缓冲区中,称之为模式空间。
    2、所有的指令操作都是在模式空间找那个进行
    3、sed根据相应的指令对模式空间中的内容进行处理并输出结果,默认输出至标准输出(即屏幕上)。


    image.png

    sed基本语法格式:
    用法:sed[选项]...{脚本指令}[输入文件]...
    选项: -version 显示sed版本
    -help :显示帮助文档
    -n,-quiet,-silent静默输出,默认情况下,sed程序在所有的脚本指令执行完毕后,将自动打印模式空间中的内容。
    -e script允许多个脚本指令被执行
    -f script-file从文件中读取脚本指令,对编写自动化脚本程序很实用
    -i ,-in-place 该选项直接修改源文件
    -l N 该选项指定l指令可以输出的行长度,l指令为输出非打印字符。
    -posix 禁用GNU sed扩展功能。
    -r 在脚本指令中使用扩展正则表达式。
    -s,-separate 默认情况下,sed将把输入的多个文件名作为一个长的连续的输入流。而GNU sed则允许把它们当作单独的文件。
    -u,-unbuffered 最低限度的缓存输入与输出
    a,append表示追加指令;
    i,insert表示插入指令;
    d,delete表示删除指令;
    s,substitution表示替换指令。
    sed脚本指令的基本格式是:
    [地址,即路径]命令(有些命令仅可以对一行操作,有些可以对多行操作),命令也可以用花括号进行组合,使命令序列可以作用于同一个地址。
    address{
    command1
    command2
    command3
    }

    比如:
    sed '2a TYPE=Ethernet' test.txt  #第二行后追加TYPE=Ethernet
    sed '3i TYPE=Ethernet' test.txt #第二行前追加TYPE=Ethernet
    sed 's/yes/no/g' test.txt  #将样本文件中的所有yes替换为no
    sed '3,4d' test.txt  # 删除第三、第四行的内容
    将样例文本中的第二个<body>替换为</body>,编写sed脚本,即将body替换为/body,但仅替换第二个body
    cat sed.sh内容如下:
    /body/{
    s::\/body:2
    }
    执行sed命令: sed -f sed.sh test.txt
    

    行编辑器介绍

    • Vim和sed awk的区别
      交互式与非交互式
      文件操作模式与行操作模式
    • sed的基本用法演示
      sed :一般用于对文本内容做替换,sed '/user1/s/user1/u1/' /etc/paswd

    sed的基本工作方式

    sed的基本工作方式是:

    • 将文件以行为单位读取到内存(模式空间)
    • 使用sed的每个脚本对该行进行操作
    • 处理完成后输出该行

    sed的替换命令s

    sed的替换命令s:

    • sed 's/old/new' filename
    • sed -e 's/old/new' -e 's/old/new' filename
    • sed -i 's/old/new' 's/old/new' filename
      带正则表达式的替换命令s:
      sed 's/正则表达式/new' filename
      sed -r 's/扩展正则表达式/new/' filename

    sed的替换命令的加强版

    1、全局替换 : s/old/new/g ,其中g为全局替换,用于替换所有出现的次数; /如果和正则匹配的内容冲突可以使用其他符号,如 :s@old@new@g
    2、标志位

    • 表示数字,第几次出现才进行替换,如 :s@old@new@2
    • g 表示全局替换,如 :s@old@new@g
    • p打印模式空间的内容 sed -n 'script' filename 阻止默认输出
    • w file将模式空间的内容写入到文件
      寻址
      分组
      sed脚本文件

    sed的多行模式

    为什么要有多行模式: 配置文件一般有单行出现,但也有使用json或XML格式的配置文件,为多行出现。
    多行模式处理命令N、D、P

    • N: 将下一行加入模式空间
      -D: 删除模式空间中的第一个字符到第一个换行符
      -P: 打印模式空间中的第一个字符到第一个换行符

    相关文章

      网友评论

        本文标题:linux之文本内容替换命令sed

        本文链接:https://www.haomeiwen.com/subject/ecthrrtx.html