• 三剑客命令之Sed的用法总结


        sed是Linux系统中最为广泛使用的命令行编辑器,sed本身也是一个管道命令,可将数据进行替换/删除/新增/选取等功能。sed命令的执行过程大致如下:

    1)一次从输入中读取一行数据;2)根据所提供的编辑器命令匹配数据;3)按照命令修改流中的数据;4)将新的数据输出到STDOUT

        sed命令格式如下:

    [root@centos7-magedu ~]# sed [-nefr] [动作]

    -n 静默模式,只有经过sed特殊处理的行才能够显示出来;

    -e 命令行模式的sed编辑,常用来分隔多个动作;

    -f 直接将sed的动作写入一个文件,-f filename则可执行filename内的sed命令

    -r 支持拓展正则表达式(默认为基本正则表达式)

    -i 修改文件内容并保存,后紧跟.bak可对将原文件另存为(filename.bak)(任意名称均可)

    function 有这些参数:

    a:行后新增,往往接字符串

    c:替换,往往与地址定界配合使用

    d:删除,通常其后不接任何参数

    i:行前新增,字符串出现在当前行的上一行

    p:打印,如只显示第二行 sed -n ‘2p’

    s:替换,通常与正则表达式配合使用,多用于文本行内的过滤和字符串替换

    下面重点说明下 sed命令下的替换选项:

    1.替换标记

     

    使用sed将文本内的test替换为trial

     由此看出,默认情况下只替换每行中出现的第一处,下面有4中可用的标记:

    1>数字,表明新文本将替换第几处模式匹配的地方;2>g,表明新文本将替换所有匹配的文本;3>p,表明原先行的内容要打印;4>w file,将替换的结果写到文件中

    2.替换字符

    当用传统的/替换文件中的路径名时,往往比较麻烦,例如用C shell替换/etc/passwd文件中的bash shell,必须这么做:

    sed ‘s//bin/bash//bin/csh/’ /etc/passwd,这通常会带来困惑和错误,此时可用@替代

    sed ‘s@/bin/bash@/bin/csh@’ /etc/passwd

    3.过滤文本中的单词

    例题:用sed命令统计/etc/init.d/functions文件中每个单词的出现次数,并排序

    分析:对单行进行正向截取很难,因为‘s@.*[^[:alpha:]](<[[:alpha:]]+>).*@1@p’一行只能替换一个单词,所以只能用反向截取,考虑将除了单词外的字符转换成换行:

    第二部分介绍高级编辑命令

    P:打印模式空间开端至 内容,并追加到默认输出之前

    h:把模式空间的内容覆盖至保持空间中

    H:把模式空间中的内容追加至保持空间中

    g:从保持空间取出数据覆盖至模式空间

    G:从保持空间取出内容追加至模式空间

    x:把模式空间中的内容与保持空间中的内容进行互换

    n:读取匹配到的行的下一行覆盖至模式空间

    N:读取匹配到的行的下一行追加至模式空间

    d:删除模式空间中的行

    D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间启动新循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环。

    上述高级编辑命令可进行如下组合:

    'n;p'  输出偶数行

    'n;d' 只显示奇数行

    'g'  所有行变为空行

    '$!N;$!D' 输出倒数后两行

    'N;D'只输出最后一行

    '1!G;h;$!d'倒序输出

    例:将文本文件的n和n+1行合并为一行,n为奇数行

  • 相关阅读:
    Python IDLE快捷键一览
    面试题——中
    面试题——君
    面试题——太(下)
    面试题——2面常见问题
    MYSQL数据库设计规范与原则
    字符串操作
    集合
    java-数组
    java异常处理机制
  • 原文地址:https://www.cnblogs.com/centos-Paul/p/9382856.html
Copyright © 2020-2023  润新知