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前面。