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

原文地址:https://www.cnblogs.com/despotic/p/10868599.html