zoukankan      html  css  js  c++  java
  • sed命令基本用法

    sed是一个非交互式文本编辑器,它可对文本文件和标准输入进行编辑
    sed 适用于以下三种场合
    编辑相对交互式文本编辑器而言太大的文件
    编辑命令太复杂,在交互式文本编辑器中难以输入的情况
    对文本扫描一遍,但是需要执行多个编辑函数的情况
    sed只对缓冲区中原始文件的副本进行编辑,并不编辑原始的文件,因此如果需要保存改动的内容,需要将输出重定向到另一个文件

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

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

    sed命令选项的一组例子
    将第一行内容打印出来
    sed -n '1p' dwa_m_excel_dura_aggr_prop.log
    将第一行取出来,并重定向到dim_ia_test.log文件中
    sed -n '1p' dwa_m_excel_dura_aggr_prop.log > dim_ia_test.log
    将第3~6行内容打印出来
    sed -n '3,6p' dwa_m_excel_dura_aggr_prop.log
    将包含application的行打印出来(这里大小写是敏感的)
    sed -n '/application/p' dwa_m_excel_dura_aggr_prop.log
    将包含application的行号打印出来(这里大小写是敏感的)
    sed -n '/application/=' dwa_m_excel_dura_aggr_prop.log
    将包含application的行号和行内容打印出来(这里大小写是敏感的),当多个编辑命令同时实现时,加-e
    sed -n -e '/application/=' -e '/application/p'  dwa_m_excel_dura_aggr_prop.log
    sed追加文本,在instead.后面追加we append a new line.内容
    sed '/instead./awe append a new line.' dim_ia_test.log

    sed追加文本,使用-f : cat append.sed

    #!/bin/sed -f
    #instead.为要查找的内容,a表示此处换行添加文本
    /instead./a
    we append a new line.
    we append another line.
    

     为脚本赋可执行权限 chmod u+x append.sed

    运行脚本:

    ./append.sed dim_ia_test.log

    在a为在定位行号之后插入文本信息

    运行结果为:

     sed文本定位的一组例子

    将含有.的行打印出来,'.'为元字符,需要转义
    sed -n '/./p' dim_ia_test.log
    将最后一行打印出来
    sed -n '$p' dim_ia_test.log   
    等价
    sed -n '$'p dim_ia_test.log
    将以ing结尾的行打印出来
    sed -n '/.*ing/p' dim_ia_test.log
    2~10行不打印,其他行打印出来
    sed -n '2,10!p' dim_ia_test.log  
    将含有HIVE_CONF_DIR的行到最后一行的行内容打印出来
    sed -n '/HIVE_CONF_DIR/,$p' dim_ia_test.log
    将第三行到含有HIVE_CONF_DIR的行的内容打印出来
    sed -n '3,/HIVE_CONF_DIR/p' dim_ia_test.log 

    sed基本编辑命令的一组例子

    一、sed插入文本,使用i

    cat insert.sed

    #!/bin/sed -f
    /instead./i
    We insert a new line.
    

    为脚本赋可执行权限 chmod u+x insert.sed

    运行该脚本

    ./insert.sed dim_ia_test.log

      

    在i为在定位行号之前插入文本信息

    二、sed修改文本用c

    cat modify.sed

    #!/bin/sed -f
    /instead./c
    We modify this line.
    

    为脚本赋可执行权限 chmod u+x modify.sed

    运行该脚本:

    ./modify.sed dim_ia_test.log

    运行结果:

     三、sed删除文本,不区分大小写

    cat delete.sed

    #!/bin/sed -f
    /[Ii][Nn][Ss][Tt][Ee][Aa][Dd]/d
    

    脚本赋可执行权限 chmod u+x delete.sed  

    运行该脚本:

    运行结果将instead所在的行删除;

     删除第一行文本
    sed '1d' dim_ia_test.log
    删除最后一行文本
    sed '$d' dim_ia_test.log
    删除第一行到第十行的内容
    sed '1,10d' dim_ia_test.log 
    删除第5行到最后一行的内容
    sed '5,$d' dim_ia_test.log   
    替换文本
    g --表示替换文本中所有出现被替换字符串之处
    p --与-n选项结合,只打印替换行
    w 文件 --表示将输出定向到一个文件
    将instead替换为xxxxx,并打印全部
    sed 's/instead/xxxxx/' dim_ia_test.log
    只打印替换的行(此时已替换)
    sed -n 's/instead/xxxxx/p' dim_ia_test.log
    替换所有出现被替换的字符串
    sed -n 's/number/xxxxx/pg' dim_ia_test.log 
    将只打印的替换行写入output文件
    sed -n 's/number/xxxxx/w output' dim_ia_test.log
    将文件中出现的number用()括起来,并打印
    sed -n 's/number/(&)/pg' dim_ia_test.log
    等价
    sed -n 's/number/(number)/pg' dim_ia_test.log
    写入一个新文件
    将1~5行写入output文件中
    sed -n '1,5 w output' dim_ia_test.log     
    将含有number关键字的行写入output文件中
    sed -n '/number/w output' dim_ia_test.log
    查找含有instead的行,将output文件的内容插入到instead行下面
    sed  '/instead/r output' dim_ia_test.log 
    退出命令
    打印前5行,然后退出
    sed  '5 q' dim_ia_test.log 
    打印从第一行到含有number的行,并退出
    sed  '/number/q' dim_ia_test.log

    在定位行执行命令组
    将含有number的行内容和行号打印出来
    sed -n '/number/{p;=}' dim_ia_test.log

  • 相关阅读:
    【洛谷P4318】完全平方数
    【洛谷P2257】YY的GCD
    【洛谷P1403】约数研究
    【洛谷P3455】ZAP-Queries
    【CF600E】Lomsat gelral
    【BZOJ3289】Mato的文件管理 莫队+树状数组
    【洛谷P2585】三色二叉树
    【CF242E】Xor Segment
    【洛谷P4144】大河的序列
    hdu 1547(BFS)
  • 原文地址:https://www.cnblogs.com/xiao02fang/p/10039945.html
Copyright © 2011-2022 走看看