zoukankan      html  css  js  c++  java
  • Linux-sed command

    sed命令

    sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。 sed的选项、命令、替换标记 命令格式 sed [options] 'command' file(s) sed [options] -f scriptfile file(s) 选项 -e

    sed的选项、命令、替换标记

    命令格式

    sed [options] `command` file(s)
    sed [options] -f scriptfile file(s)

    选项与参数:

    -e(script)或--expression=(scrip):以选项中指定的script来处理输入的文本文件
    -f(script文件)或--file=(script文件):以选项中指定的script文件来处理输入的文本文件
    -n或--quiet或--silent:仅显示script处理后的结果
    -V或--version:显示版本信息

    -n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
    -e :直接在命令列模式上进行 sed 的动作编辑;
    -f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
    -r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
    -i :直接修改读取的文件内容,而不是输出到终端。

    动作说明: [n1[,n2]]function
    n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』

    function:
    a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
    c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
    d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
    i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
    p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
    s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

    sed命令

    a 在当前行下面插入文本
    i 在当前行上面插入文本
    c 把选定的行改为新的文本
    d 删除,删除选择的行
    D 删除模块的第一行
    s 替换指定字符
    h 拷贝模块的内容到内存中的缓冲区
    H 追加模块的内容到内存中的缓冲区

    sed替换标记

    g 表示行内全面替换
    p 表示打印行
    w 表示把行写入一个文件
    x 表示莫板块中的文本和缓冲区中的文本
    y 表示把一个字符翻译为另外的字符
    g 已匹配字符串标记

    sed用法实例
    以行为单位的替换与显示

     cp /etc/passwd ./file

    sed '1,10s/root/roots/' file

    -n选项和p命令一起使用表示只打印那些发生替换的行:
    sed -n '1,10s/root/roots/p' file

    以行为单位的新增/删除

    删除空白行

    sed '/^$/d file

    删除文件的第二行

    sed '2d' file

    sed '2,$d' file

    sed '/^test/d' file

    数据的搜寻并显示

    nl /etc/passwd | sed '/root/p'
    root:x:0:0:root:/root:/bin/bash
    root:x:0:0:root:/root:/bin/bash
    daemon:x:1:1:daemon:/usr/sbin:/bin/sh
    bin:x:2:2:bin:/bin:/bin/sh
    sys:x:3:3:sys:/dev:/bin/sh
    sync:x:4:65534:sync:/bin:/bin/sync
    ....下面忽略

    数据的搜寻并删除

    nl /etc/passwd | sed  '/root/d'
    2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh
    3  bin:x:2:2:bin:/bin:/bin/sh
    ....下面忽略
    #第一行的匹配root已经删除了

    数据的搜寻并执行命令

    搜索/etc/passwd,找到root对应的行,执行后面花括号中的一组命令,每个命令之间用分号分隔,这里把bash替换为blueshell,再输出这行:

    nl /etc/passwd | sed -n '/root/{s/bash/blueshell/;p}'
     1  root:x:0:0:root:/root:/bin/blueshell

    如果只替换/etc/passwd的第一个bash关键字为blueshell,就退出

    nl /etc/passwd | sed -n '/bash/{s/bash/blueshell/;p;q}'    
    1  root:x:0:0:root:/root:/bin/blueshell
  • 相关阅读:
    解决SharePoint 文档库itemadded eventhandler导致的上传完成后,编辑页面保持报错的问题,错误信息为“该文档已经被编辑过 the file has been modified by...”
    解决SharePoint 2013 designer workflow 在发布的报错“负载平衡没有设置”The workflow files were saved but cannot be run.
    随机实例,随机值
    Spring4笔记
    struts2笔记(3)
    struts2笔记(2)
    获取文本的编码类型(from logparse)
    FileUtil(from logparser)
    DateUtil(SimpleDateFormat)
    struts2笔记
  • 原文地址:https://www.cnblogs.com/Nyan-Workflow-FC/p/6238329.html
Copyright © 2011-2022 走看看