• shell sed语法


    sed 是一种在线的、非交互式的编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临 时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成 后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操 作;编写转换程序等。

    sed 命令格式

    sed [options] edit_commands [file] # [ ] 中的内容为可选可不选
    

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

    sed 支持正则表达式

    sed 在文件中查找模式时也可以使用正则表达式(RE)和各种元字符。

    正则表达式是括在斜杠间的模式, 用于查找和替换,以下是sed支持的元字符。

     

     sed 常用选项

     sed 常用命令选项

     sed 高级命令选项

     sed 替换标志

     sed 命令使用实例

     sed 命令进行文本替换

    sed 使用 s 命令来进行文本替换操作

    sed 's/srcStr/dstStr/' file
    

      其中,srcStr 为想要替换的文本,dstStr 为将要替换成的文本。使用 s 命令时,sed 编辑器会在一 行一行地读取文件 file,并在每行查找文本 srcStr,如果找到了,则将该处的 srcStr 替换为 dstStr

    / 字符为界定符,用于分隔字符串(sed 编辑器允许使用其他字符作为替换命令中的字符串分隔 符):

     sed 's!/bin/bash!/BIN/BASH!' /etc/passwd # 使用 ! 作为字符串分隔符
    sed 's#3#88#g' datafile
    

     默认情况下,替换命令只会替换掉目标文本在每行中第一次出现的地方。若想要替换掉每行中所有 匹配的地方,可以使用替换标记 g。替换标记放在编辑命令的末尾。除了 g 外,还有几种替换标 记:

     数字指明替换掉第几次匹配到的文本

    没有设置这个标记时,默认是替换第一次匹配的文本

    sed 's/root/ROOT/2' /etc/passwd
    

      这行命令将 /etc/passwd 文件中每行的第 2 个 root 替换为 ROOT

    g 替换所有匹配到的文本

    sed 's/root/ROOT/g' /etc/passwd
    

      这行命令将 /etc/passwd 文件中的 root,全部替换为 ROOT;

    p 打印与替换命令中指定模式(srcStr)相匹配的行

    sed 's/root/ROOT/p' /etc/passwd
    

      执行这命令,会在 STDOUT 上看到包含有 root 的行被输出了两次,一次是 sed 编辑器自动输出 的;另一次则是 p 标记打印出来的匹配行 单独地使用 p 标记没什么用处,通常将 p 标记和 -n 选项结合起来使用,这样就可以只输出被匹配 替换过的行了

    sed -n 's/root/ROOT/gp' /etc/passwd # 将 /etc/passwd 中 所有的 root 都替换成 ROOT,并输出被修改的行
    

      注:可以使用 " = " 命令来打印行号,用法与 p 一样。

    w file :将替换的结果写到文件中

    只保存被修改的行,与 -n + p 的功能类似

    sed -n 's/root/ROOT/g w change.txt' /etc/passwd # 将
    /etc/passwd 中所有的 root 都替换成 ROOT,并将被修改的行保存到文change.txt 中去
    

      

  • 相关阅读:
    Caused by: java.lang.ClassNotFoundException: org.hibernate.annotations.common.reflection.MetadataPro
    Caused by: java.lang.ClassNotFoundException: org.dom4j.DocumentException
    让你的C程序更有效率的10种方法
    c++效率浅析
    Caused by: java.lang.ClassNotFoundException: org.hibernate.engine.FilterDefinition
    Caused by: java.lang.ClassNotFoundException: javax.transaction.TransactionManager
    Caused by: java.lang.NoClassDefFoundError: org/hibernate/cfg/Configuration
    Caused by: java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWo
    Caused by: java.lang.ClassNotFoundException: org.jbpm.pvm.internal.processengine.SpringHelper
    Caused by: java.lang.ClassNotFoundException: org.aopalliance.intercept.MethodInterceptor
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/15060980.html
Copyright © 2020-2023  润新知