Shell:在2个已知字符串之间替换字符串

时间:2013-05-08 19:35:39

标签: shell replace sed awk

我希望在file1中的abc_def_APP和application1.war字符串之间替换new_version varaiable(13.2.0 / 8)的内容

脚本:

    #!/bin/ksh
   new_version="13.0.5/8"          
 old_version=($(grep -r "location=.*application1.war" /path/file1| awk '{print ($1)}'| cut -f8- -d"/"|sed 's/.\{1\}$//'))
   echo "$old_version" 'This gives me version number from file1 which needs to be replaced(13.2.0/9)

File1内容:

location="cc://view/blah/blah/blah/abc_def_APP/13.2.0/9/application1.war"

2 个答案:

答案 0 :(得分:0)

使用以下sed命令进行替换:

sed -i.bak -r "s#^(.*/abc_def_APP/).*(/application1\.war.*)#\1$version1/$version2\2#" /path/file1

答案 1 :(得分:0)

使用GNU awk(用于gensub()):

$ cat file
location="cc://view/blah/blah/blah/abc_def_APP/13.2.0/9/application1.war"

$ new_version="13.2.0/8" 

$ gawk -v nv="$new_version" '{$0=gensub(/^(location.*abc_def_APP\/).*(\/application1.war.*)/,"\\1" nv "\\2","")}1' file
location="cc://view/blah/blah/blah/abc_def_APP/13.2.0/8/application1.war"

这个和sed解决方案的区别在于,由于你的new_version变量包含“/”(或任何其他字符),awk不需要你跳过箍。