zoukankan      html  css  js  c++  java
  • sed语句

    sed命令
      Linux文本处理三剑客 之 sed
      sed stream EDite
        作为行编辑器,对文本进行编辑(以行为单位进行编辑)
        注意:sed编辑文件,却不改变原文件;

      sed的工作原理:
        指定一个文本文件,依次读取文本文件中每行的内容,读取到模式空间中(PATTERN SPACE),在模式空间中进行文本匹配(正则表达式),对匹配后的内容进行修改(替换、删除、打印、修改、保存等)

      用法:
        sed [OPTION]... {script-only-if-no-other-script} [input-file]...
        sed [参数] “sed自己独立的用法格式的语句”[文本文件]

      常见选项
        -n 拒绝默认显示
        -r 指定使用扩展的正则表达式
          匹配IP
          1、所有的 都不要 2、 | 或者
        -e script for while if
        -f 指定脚本文件
        -l 指定文本换行的长度?
        -i 直接修改文件内容(不要使用)

      地址定界方式
        1、直接匹配数值
          sed -n '5p' 文件
        2、 d~步长
          sed -n '1~3p' 文件
        3、$ 指定行尾
          sed -n '10,$p' 文件
        4、/正则/
          /正则1/,/正则2/
            sed -n '/k{5,}/,$p' abc
            sed -n '/(fd)+/,+2p' abc ? 正则写在前面就没有问题,写在后面就有问题
            sed -n '
        5、0,addr
          addr 可以为 数字/$/正则表达式
          sed -n '0,/k{5,}/p' abc
        6、addr,+N
          配置addr行到,addr后N行
          sed -n '/fd/,+5p' abc

        **常见命令
          p print 打印(默认在屏幕上显示出来) 建议和 -n 一起使用;
          c 替换
            sed "/aaa/c A" a
          d 删除
            sed "/aaa/d" a
            sed "1,3d" a
          n N 读取/添加 模式匹配到的行的下一行内容,再对其进行操作
          w 保存文件内容到一个新的文件
            sed "/patthen/w 新的文件名" 原来的文件名
            sed "/k/w /tmp/aabbcc" abc
          *s* 文本内容替换,默认替换模式空间匹配到的第一项;
            语法格式: s/pattern/字符串/
              中间的 / 可以替换为任意一个特殊字符 例如:s### s@@@ s%%%%
            g 全部
            1 2 和正则表达式的分组相同,实现反向应用;
              指定某一个匹配项进行修改替换
            & 调用前面(pattern)匹配的内容
              sed "s/r..t/&er/g" 文件
            w
            p

      sed的高级应用
        模式空间 -- hold space"占有空间"
        以后自己取学习

    练习:
    删除/boot/grub/grub.conf文件中所有空白开头的行行首的空白字符;
      sed 's/^[[:space:]]+//g' /boot/grub/grub.conf
    删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行 的行首的#和空白字符;
      sed 's/^#[[:space:]]+//g' /etc/fstab
    给定一个目录,取出其目录名
      echo "/etc/passwd" | sed 's/[^/]+$//'
    给定一个目录,取出其文件名
      echo "/etc/passwd" | sed 's#^/.*/(.*)##

      /var/log/message
      sed '/[^/]+/'

      dirname -- 取出文件路径的路径部分
      basename -- 取出文件路径的文件名部分

  • 相关阅读:
    2017-2018-1 20155204 《信息安全系统设计基础》第七周学习总结
    2017-2018-1 20155203 20155204 实验二 固件程序设计
    2017-2018-1 20155204 《信息安全系统设计基础》第六周学习总结
    20155204《信息安全系统设计》第六周课下作业:缓冲区溢出漏洞实验
    《信息安全技术》实验2——Windows口令破解
    2017-2018-1 20155204 《信息安全系统设计基础》第五周学习总结
    实现mypwd
    2017-2018-1 20155331 《信息安全系统设计基础》第九周学习总结
    2017-2018-1 20155331 《信息安全系统设计基础》第八周课堂测试
    2017-2018-1 20155331 《信息安全系统设计基础》第八周学习总结
  • 原文地址:https://www.cnblogs.com/wangzijie123456/p/11375170.html
Copyright © 2011-2022 走看看