• Linux文本处理之sed


    sed(stream editer),流编辑器,对标准输出或文件逐行进行处理

    一、语法格式:

    1、stdout | sed [option] "pattern command"

    2、sed [option] "pattern command" file

    二、sed的选项

    -n 只打印模式匹配行(静默模式)

    在sed的用法中,所有来自标准输入的内容都要print到屏幕,加-n后只显示经过sed处理的内容

    -e 直接在命令行进行sed编辑,默认选项(只有1个时可以省略)

    -f 编辑动作保存在文件中,指定文件执行

     

    -r 支持扩展正则表达式

     

    -i 直接修改文件内容(重要)

     

     

     三、sed中的pattern详解

     匹配模式                                     含义

    10command                                 匹配到第10行(例:sed -n '10p' /etc/passwd,cat -n /etc/passwd)---p代表打印print

    10,20command                             匹配从第10行开始,到第20行结束

    10,+5command                             匹配从第10行开始,到第15行结束(例:sed -n '10,+5p' /etc/passwd )

    /pattern1/command                      匹配到pattern1的行(例:sed -n '//sbin/nologin/p' /etc/passwd)

    /pattern1/,/pattern2/command      匹配到pattern1的行开始,到匹配到pattern2的行结束

    10,/pattern1/command                   匹配从第10行开始,到匹配到pattern1的行结束

    /pattern1/,10command                   匹配到pattern1的行开始,到第10行匹配结束

     四、sed中的编辑命令详解 

    查询     p      打印

    增加     a      行后追加(sed -i '/^root/,/ntp/a this is a test' passwd)

               i       行前追加(sed -i '/^root/,/ntp/i  AAAAA BBBBB' passwd)

               r       外部文件读入,往后追加

               w      匹配行写入外部文件

    删除     d       删除

    修改     s/old/new        将行内第一个old替换为new

               s/old/new/g     将行内全部的old替换为new

               s/old/new/2g   将行内从2个开始到剩下所有的old替换为new

               s/old/new/ig    将行内old全部替换为new,忽略大小写

    转义符的作用是消除有特殊含义字符的特殊意义,使其还原为普通字符
    其实sed的替换命令格式不一定要是 s/.../.../,下面这样也都可以:
    s#...#...#
    s_..._..._
    即命令s后可以跟任意字符,只要跟替换内容不重复即可。这样,路径里的/就不再需要转义了。

    sed中引用变量时注意事项:

         (1)、匹配模式中存在变量,则建议使用双引号;

         (2)、sed中需要引入自定义变量时,如果外面使用单引号,则自定义变量也必须使用单引号

    五、利用sed查询特定内容

    查询命令                              含义

    1p                                       打印第1行内容

    1,10p                                   打印1行到10行的内容

    1,+5p                                  打印1行到6行的内容

    /pattern1/p                         打印匹配到pattern1的行内容

    /pattern1/,/pattern2/p         打印匹配到pattern1的行直到匹配到pattern2的所有行内容

    10,/pattern1/p                      打印第10行直到匹配到pattern1的所有行内容

    /pattern1/,10p                      打印匹配到pattern1的行到10行的所有行内容

    六、利用sed删除特定内容

    删除命令                              含义

    1d                                       删除第1行内容

    1,10d                                   删除1行到10行的内容

    1,+5d                                  删除1行到6行的内容

    /pattern1/d                         删除匹配到pattern1的行内容

    /pattern1/,/pattern2/d         删除匹配到pattern1的行直到匹配到pattern2的所有行内容

    10,/pattern1/d                      删除第10行直到匹配到pattern1的所有行内容

    /pattern1/,10d                      删除匹配到pattern1的行到10行的所有行内容

     

    1、删除配置文件中的#开头注释行和空行

    sed -i '/^#/d;/^$/d' file(nginx.conf)

    sed -i '/[:blank:]*#/d' file(#前有0个或多个空格)

    2、在配置文件中所有不以#开头的行前面添加*号

    sed -i 's/^[^#]/*&/g' file---反向引用&

    七、利用sed修改文件内容

    编辑命令                                          含义

    1s/old/new                                      替换第1行内容old为new

    1,10s/old/new                                  替换1行到10行的内容old为new

    1,+5s/old/new                                  替换1行到6行的内容old为new

    /pattern1/s/old/new                         替换匹配到pattern1的行内容old为new

    /pattern1/,/pattern2/s/old/new         替换匹配到pattern1的行直到匹配到pattern2的所有行内容old为new

    10,/pattern1/s/old/new                      替换第10行直到匹配到pattern1的所有行内容old为new

    /pattern1/,10s/old/new                      替换匹配到pattern1的行到10行的所有行内容old为new

    实际应用

    sed -i 's/[0-9]*//g' file(通篇搜索,0个或多个数字替换为空---正则表达式)

    八、利用sed追加文件内容

     

     

  • 相关阅读:
    构建之法第九、十章读后感
    构建之法第七章读后感
    构建之法五、六章读后感
    构建之法第四章读后感
    一组阶段小记之再读构建之法
    打印控件
    TTS语音
    VS2005通过网络连接CE设备进行调试开发
    Windows XP下安装WinCE6.0开发环境
    利用VS2005创建WINCE 6.0 平台
  • 原文地址:https://www.cnblogs.com/xiaoxianxianxian/p/12642732.html
Copyright © 2020-2023  润新知