zoukankan      html  css  js  c++  java
  • sed使用

    SED是一种在线的、非交互式的编辑器,它一次处理一行内容。和awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作; 编写转换程序等。

      

    命令格式

    先准备一个文件

    [root@slave ~]# head /etc/passwd |grep -n ''   > mypasswd
    [root@slave ~]# cat mypasswd
    1:root:x:0:0:root:/root:/bin/bash
    2:bin:x:1:1:bin:/bin:/sbin/nologin
    3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
    4:adm:x:3:4:adm:/var/adm:/sbin/nologin
    5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    6:sync:x:5:0:sync:/sbin:/bin/sync
    7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    8:halt:x:7:0:halt:/sbin:/sbin/halt
    9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    10:operator:x:11:0:operator:/root:/sbin/nologin 
    

    处理单个文件的命令格式

    sed     [options]   '[匹配模式]     sed 的内部命令'       file1
    

    处理多个文件的命令格式

    sed     [options]   '[匹配模式]     [sed 的内部命令]'       file1  file2
    

    options 选项是可选的,意思就是没有也行
    匹配模式 是可选的用于在文件中每一行进行匹配到模式,模式可以是正则,也可以是文件的行号
    内部的命令也是可选的,没想到吧,但是两个单引号是必须的

    [root@slave ~]# sed '' mypasswd
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    ...以下输出省略...
    

    注:
    sed和grep不一样,不管是否找到指定的模式,它的退出状态都是0
    只有当命令存在语法错误时,sed的退出状态才是非0

    一些内部选项:

    e command,--expression=command允许多台编辑。
    -h,--help打印帮助,并显示bug列表的地址。
    -n,--quiet,--silent取消默认输出。
    -f,--filer=script-file引导sed脚本文件名。
    -V,--version打印版本和版权信息。
     
    部分命令实例:
     
    删除:d命令
    $ sed '2d' example-----删除example文件的第二行
    替换:s命令
    $ sed 's/test/mytest/g' example-----在整行范围内把test替换为mytest。如果没有g标记,则只有每行第一个匹配的test被替换成mytest。
    $ sed -n 's/^test/mytest/p' example-----(-n)选项和p标志一起使用表示只打印那些发生替换的行。也就是说,如果某一行开头的test被替换成mytest,就打印它。
     
    追加命令:a命令
    $ sed '/^test/a\--->this is a example' example<-----'this is a example'被追加到以test开头的行后面,sed要求命令a后面有一个反斜杠。
     

    插入命令:i

    # sed -r '2i1111111111111' /etc/hosts
    # sed -r '2i111111111
    > 2222222222
    > 3333333333' /etc/hosts

    修改命令:c

    # sed -r '2c1111111111111' /etc/hosts
    # sed -r '2c111111111111
    > 22222222222
    > 33333333333' /etc/hosts

    选定行的范围:逗号
    $ sed -n '/test/,/check/p' example-----所有在模板test和check所确定的范围内的行都被打印。
    $ sed -n '5,/^test/p' example-----打印从第五行开始到第一个包含以test开始的行之间的所有行。
    $ sed '/test/,/check/s/$/sed test/' example-----对于模板test和check之间的行,每行的末尾用字符串sed test替换
  • 相关阅读:
    决策树
    交叉熵与softmax
    集成学习
    SVM算法
    蒙特卡罗方法
    K近邻--KNN
    K-Means聚类
    DBSCAN密度聚类
    Bagging、随机森林
    支持向量机SVM
  • 原文地址:https://www.cnblogs.com/wyglog/p/12374036.html
Copyright © 2011-2022 走看看