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