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

posted @ 2018-01-10 19:58  汪一溪  阅读(2569)  评论(0编辑  收藏  举报