zoukankan      html  css  js  c++  java
  • linux中sed命令的使用

    sed命令是linux或者shell编程中常用的筛选、替换命令,如果能熟练使用sed则对经常使用的人来说在工作上是非常有帮助的

    下面把sed主要的用法列出来(有错误的地方大家可以指正):

    p命令
    只打印第三行,没有-n会在第三行后多打印第三行:
    sed -n '3p' filename


    只打印最后一行:
    sed -n '$p' filename


    只打印10到20行(包括10和20行,若后面数字小于前面数字,则只打印前面数字的行):
    sed -n '10,20p' filename


    打印包含My在行尾的行到包含You的行:
    sed -n '/My$/,/You/p' filename


    打印匹配行和接着的5行:
    sed -n '/My/,+5p' datafile


    打印匹配行和下面行号为5的行,直到结尾:
    sed -n '/My/,~5p' datafile


    打印5倍数的行:
    sed -n '0~5p' file
    sed '0~5!d' file

    ----------------------------------------------------------

    P命令
    打印模式空间中第一个换行符前的内容

    其实就是打印单数行

    ---------------------------------------------------------

    d命令
    删除第五行并打印其他行:
    sed '5d' filename
    删除包含My的行到包含You的行,不打印:
    sed -n '/My/,/You/d' filename
    删除包含My的行到第八行,不打印其他行:
    sed -n '/My/,8d' filename

    ---------------------------------------------------------
    D命令
    删除模式空间中第一个换行符前的内容

    其实就是打印双数行

    ---------------------------------------------------------

    s命令
    一个字符串替换另一个
    sed 's/^My/You/g' datafile
    g表示行内全局替换,也可用数值代替
    3g表示从第三个匹配到的开始全局替换


    sed -n '1,20s#My$#You#gp' datafile
    打印1到20行内以My结尾的替换为You的行
    注:紧跟s的符号为分隔符,除了换行符反斜杠


    sed 's/^My/You/g;s/are/Are/g' datafile
    同时替换多个


    sed '/ABC/!s/^My/You/g;s/are/Are/g' datafile
    替换不包含ABC的行

    ---------------------------------------------------------

    r命令
    sed '/^My/r datafile1' datafile2
    把datafile1中的所有内容插入到在datafile2中以My开头的行之后

    ---------------------------------------------------------

    w命令
    sed '/^My/w datafile1' datafile2
    把在datafile2中以My开头的行写入到datafile1中

    ---------------------------------------------------------

    a命令
    在查找到的行后追加,有,则直接跟文本
    sed '/My/ahi,world how are you' datafile
    同r命令,只不过是写入一段文字

    ---------------------------------------------------------

    i命令
    当前行的前面插入新的文本
    sed '/My/ihi,world how are you' datafile
    用法同a,只是文本插入到前面

    ---------------------------------------------------------

    c命令
    将查到的文本修改成新文本
    sed '/My/chi,world how are you' datafile
    用法同a和i

    ---------------------------------------------------------

    N命令
    将下一行输入追加到模式空间以 分隔
    sed '/My/{N;s/My/Your/;}' datafile
    若最后一行为奇数行,则N后面命令也不执行

    ---------------------------------------------------------
    n命令
    将下一行输入读入到模式空间

    ---------------------------------------------------------

    y命令
    sed '1,5y/abcd/ABCD/' datafile
    把abcd都换成大写,和s命令一样/可以换
    用法同tr命令

    ---------------------------------------------------------

    q命令
    退出命令
    sed '/My/{q;s/My/Your/;}' datafile
    不会执行s/My/Your/

    ---------------------------------------------------------

    h/H命令和g/G命令
    h清除缓冲区内容,保存最近执行h模式内容
    H把匹配到内容追加保存在缓冲区
    g把缓冲区内容替换掉模式内容
    G把缓冲区内容追加到模式空间行后
    sed -e '/My/h' -e '$g' datafile
    sed -e '/My/H' -e '$G' datafile

    g: 将hold space中的内容拷贝到pattern space中,原来pattern space里的内容清除
    G: 将hold space中的内容append到pattern space 后
    h: 将pattern space中的内容拷贝到hold space中,原来的hold space里的内容被清除
    H: 将pattern space中的内容append到hold space 后
    x: 交换pattern space和hold space的内容

    ---------------------------------------------------------

    x命令
    交换保持空间和模式空间的内容

    ---------------------------------------------------------

    l命令
    显示特殊字符,不显示乱码
    sed -n '1,$l' f1

    ---------------------------------------------------------

    -f参数
    sed -n -f script datafile

    ---------------------------------------------------------

    -i参数
    直接修改文件,不会打印,如:
    sed -i G datafile
    把datafile中每行后面加个空行(G)


    sed -i 's/^My/You/g' datafile
    在文本中直接替换


    sed -i '/My/{x;p;x}' datafile
    在有My行前面加一空白行


    sed -i '$!N;/^(.*) 1$/!P;D' datafile
    删除相邻的重复行,只保留第一行

    ---------------------------------------------------------
    -i.bak
    修改原始文件并创建原始文件副本
    sed -i.bak 's/^My/You/g' datafile
    修改datafile并创建一个datafile.bak的备份

    ---------------------------------------------------------

    -e参数
    sed命令中进行多重编辑
    sed -n -e '/My$/' -e 's/My/You/gp' datafile
    先打印以My结尾的行,再执行替换语句

    ---------------------------------------------------------

    =命令
    打印行号:
    sed -n '=' f1

    $=  计算文本行数
    sed -n '$=' datafile1 datafile2...

    ---------------------------------------------------------

    $!除了最后一行
    4!除了第四行
    sed '4! s/My/Your/g' datafile
    除了第四行都执行替换

    ---------------------------------------------------------

    b命令
    标签,可以跳转到标签执行,如
    sed '/^My/byyc;s/^/#/;b;:yyc;s/^My/Your/ datafile
    如果是My开头则换成Your,否则行前加#

    ---------------------------------------------------------

    sed正则表达式
         不转义,即元字符照常打印
    ^    以字符串开头,如/^My/以My开头的行
    $   以字符串结尾,如/My$/以My结尾的行
    .    匹配一字符,如/M..y/M和y间有俩字符
    *   匹配0个或多个前面的字符
    []   匹配里面的单字符,如/[Mh]y/匹配My和hy
    [^]  匹配不在里面的字符
          如/[^Mh]y/匹配不是My和hy
    (..) 保存已经匹配的字符,用 来呼出
         如1,20s/(you)self/1r/用1呼出you,
        最多保存9个,从左边开始标记
    &    保存查找串,如s/My/you&you/,&表示My
    < 词首定位符,和^类似,如/<My/
    > 词尾定位符,和$类似,如/My>/
    x{m} 连续m个x,如/a{5}/查找连续5个a
    x{m,} 至少m个x,如/a{5,}/至少5个a
    x{m,n} 至少m个x,最多n个x
    w   匹配每个字母和数字
    w+  匹配每一个单词
    s  匹配每个空格
    x+  x表示一个字符or一个单词,当匹配到一个或者多个时操作

    关于本篇内容如有转载请注明出处;技术内容的探讨、纠错,请发邮件到70907583@qq.com
  • 相关阅读:
    GIthub的小技巧
    C#中DateTime格式转换
    流程控制: if分支 while循环 for循环
    注释,输入,格式化输出,数据类型,运算符
    计算机原理简单了解
    day30
    day19
    day18 时间:time:,日历:calendar,可以运算的时间:datatime,系统:sys, 操作系统:os,系统路径操作:os.path,跨文件夹移动文件,递归删除的思路,递归遍历打印目标路径中所有的txt文件,项目开发周期
    day17跨文件夹导入模块,模块的两种被执行方式,包,直接使用包中模块,包的管理
    day16模块,导入模板完成的三件事,起别名,模块的分类,模块的加载顺序,环境变量,from...import语法导入,from...import *,链式导入,循环导入
  • 原文地址:https://www.cnblogs.com/watertaro/p/9221007.html
Copyright © 2011-2022 走看看