shell sed語法詳解


sed  替換文件中的字符串

sed -e 's/foo/bar/' myfile   將 myfile 文件中每行第一次出現的foo用字符串bar替換,然后將該文件內容輸出到標准輸出

sed -e 's/foo/bar/g' myfile  g 使得 sed 對文件中所有符合的字符串都被替換

sed -i 's/foo/bar/g' myfile  選項i的用途是直接在文件中進行替換

為防止誤操作帶來災難性的后果,sed在替換前可以自動對文件進行備份,前提是需要提供一個后綴名。mac osx下是強制要求備份的,centos下是可選的 
sed -i '.bak' 's/foo/bar/g' ./m* 
如果不需要備份文件,使用空字符串來取消備份,mac osx下可以使用如下命令完成替換操作: 
sed -i '' 's/foo/bar/g' ./m*

sed 's/^/添加的頭部&/g' //在所有行首添加
sed 's/$/&添加的尾部/g' //在所有行末添加
sed '2s/原字符串/替換字符串/g' //替換第2行
sed '$s/原字符串/替換字符串/g' //替換最后一行
sed '2,5s/原字符串/替換字符串/g' //替換2到5行
sed '2,$s/原字符串/替換字符串/g' //替換2到最后一行

替換樣式可以多個在同一條命令中執行,用分號”;”分隔,例如:

代碼如下:

sed 's/^/添加的頭部&/g;s/$/&添加的尾部/g' //同時執行兩個替換規則

 

當替換的內容有變量時,需要使用“”

如:sed "s/$a/$b/" filename

常見字符串替換:

1.替換sdk.dir=H:\\sdk.text  需要將H:\\sdk.text替換為/Users/jenkins/jenkins/tool/android-sdk-macosx

sed -i "" 's@\(sdk.dir=\).*@\1\/Users/jenkins/jenkins/tool/android-sdk-macosx@' ${WORKSPACE}${fileload}  

---s后面的分隔符可以為/ @ #等。.*代表sdk.dir=后的內容  \1\代表sdk.dir=

2.替換thinkive.keystore為/Users/jenkins/Documents/Android_keystore/thinkive.keystore

sed -i "" 's@thinkive.keystore@/Users/jenkins/Documents/Android_keystore/thinkive.keystore@' ${WORKSPACE}/app/build.gradle

直接替換即可。

3.替換<string>23</string> 為<string>24</string>

sh '''sed -i "" "s@<string>23</string>@<string>${Codeversion}</string>@" ${WORKSPACE}${fileload}

直接替換即可。

4.替換特殊字符串中的字符串。如替換thinkiveQWERT1003中的1003為1004

sed -i "" '/thinkiveQWERT1003/s/1003/1004/' ${WORKSPACE}/app/build.gradle

原字符串寫在s前面。


免責聲明!

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



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