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