zoukankan      html  css  js  c++  java
  • sed替换文本

    shell 文本替换 ---出现--- sed:-e 表达式 #1,字符 8:“s”的未知选项

    需要替换的行为:

    monitor.url=http://192.168.25.100:8443/rest

    查询资料得知,报错是因为替换的字符串包含有分隔符/

    所以这行改一下分隔符就可以解决问题了  (这里的分隔符随自己定义 例如:sed -i "s#$url#$1#g" datasource.properties  这三个分隔符要统一就可以了)

    改成感叹号!或者|  等其他来分割

    sed -i "s!$url!$1!g" datasource.properties

    关于sed 命令中的转义符为()

    还有一点需要注意的是:

         在某些问文件中不知道修改了什么东西导致文件格式出现了问题、导致使用sed 命令无法对文件进行有效的操作;

          那么出现这样的情况的话就需要进行源文件的还原了;暂时还不明白是何原因

          还有就是刚发现有时候sed 不能使用了,一直都不知道是啥原因、所以就换了一种方式:

          find命令查找和替换

          命令格式:find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g'

          #查找替换当前目录下包含字符串并进行替换

          find -name '*.txt' | xargs perl -pi -e 's|智慧乡村|北部山区|g'

          如果有哪位大神知道的、还请指导一二啊、在下感激不尽、先在此谢过了

    本文来自:http://www.cnblogs.com/tzhyy/p/10207464.html

    2019年6月12日16:47:06

    sed 或用法
    sed -i '/user_host_bind/ s/<!--|-->//g' apps.xml

    思路 首先找到该行特有的东西,然后进行单个替换,替换成功之后,还原文件,尝试替换多个

    例子:
    有一个文件apps.xml

    [root@localhost app]# cat apps.xml 
    <!--<app id="user_host_bind" howin="we1b">-->
    <app id="appform_restrict" howin="web"/>

    想要将该文件中的注释删除,首先找到该文件中对应行,该行只有id是独立的
    所以先用sed匹配id,找到行之后,使用或用法,删除注释

    所以得出

    sed -i '/user_host_bind/ s/<!--|-->//g' apps.xml

    拆分:
      /user_host_bind/ 匹配到关键字所在的行
      s/<!--|-->//g 或用法替换该行中不需要的东西

    sed awk grep 与或用法

    或用法

    sed:
    sed -i 's/text1|text2>//g' apps.xml
    awk: awk '/text1/||/text2/{print $0}' apps.xml
    grep: grep -E '(text1|text2)' apps.xml


    与用法

    sed:
    sed -n '/text1/{/text2/g}' apps.xml
    awk: awk '/text1/&&/text2/{print $0}' apps.xml
    grep: grep -E '(text1|text2)' apps.xml 这里可能有点问题

    sed新用法:

      例如:在文本中某一行后的第三行加入文本内容

    [root@localhost ~]# cat test.txt 
    <ul name="a">
      <li></li>
    </ul>
    <ul name="b">
      <li></li>
    </ul>
    <ul name="c">
      <li></li>
    </ul>

    假如想在第二个ul行下的<li></li>下新加一行<li>新加行</li>,怎么做?

    [root@localhost ~]# sed -e '/name="b"/{n;s|$|
    <li>新加行</li>|}' test.txt 
    <ul name="a">
      <li></li>
    </ul>
    <ul name="b">
      <li></li>
    <li>新加行</li>
    </ul>
    <ul name="c">
      <li></li>
    </ul>

    解释:

    /name="b"/  找到只有一个关键字的行
    n; 在匹配行行向下走一行,如果是3行就写3个n;
    s 在sed中用作修改
    $ 在匹配行的末尾配合后边的 进行换行,然后新加内容

    注:上述方法可能会导致文件出现^M内容,解决方法如下
    cat  test.txt | tr -s "
    " "
    " > new.txtcat new.txt > test.txtrm -rf new.txt

    首先将文件cat出来,使用tr命令修改掉里边多余的^M(这个东西是什么可以百度查阅相关资料,这里不多赘述),保存到new.txt

    然后将修改好的new.txt覆盖到test.txt

    删除new.txt

  • 相关阅读:
    jMeter 里 CSV Data Set Config Sharing Mode 的含义详解
    如何使用 jMeter Parallel Controller
    使用 Chrome 开发者工具 coverage 功能分析 web 应用的渲染阻止资源的执行分布情况
    使用 Chrome 开发者工具的 lighthouse 功能分析 web 应用的性能问题
    关于 SAP 电商云首页加载时触发的 OCC API 请求
    SAP UI5 确保控件 id 全局唯一的实现方法
    SAP 电商云 Accelerator 和 Spartacus UI 的工作机制差异
    介绍一个好用的能让网页变成黑色背景的护眼 Chrome 扩展应用
    Chrome 开发者工具 performance 标签页的用法
    Client Side Cache 和 Server Side Cache 的区别
  • 原文地址:https://www.cnblogs.com/despotic/p/10868599.html
Copyright © 2011-2022 走看看