• 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

  • 相关阅读:
    TCP的流量控制
    [数组]数组元素分割
    [折半查找]排序数组中某个元素出现次数
    [队列]判断出栈序列
    [排序算法]堆排序
    [树结构]有实际用途的树的计算公式
    重写重要的库函数
    [链表]同时遍历两个链表
    [查找]二分查找
    [数组]数组元素置换方法
  • 原文地址:https://www.cnblogs.com/despotic/p/10868599.html
Copyright © 2020-2023  润新知