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|$|\n<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中用作修改
$ 在匹配行的末尾配合后邊的\n進行換行,然后新加內容

注:上述方法可能會導致文件出現^M內容,解決方法如下
cat  test.txt | tr -s "\r\n" "\n" > new.txtcat new.txt > test.txtrm -rf new.txt

首先將文件cat出來,使用tr命令修改掉里邊多余的^M(這個東西是什么可以百度查閱相關資料,這里不多贅述),保存到new.txt

然后將修改好的new.txt覆蓋到test.txt

刪除new.txt


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM