2013-05-08 85 views
0

祝在abc_def_APP和application1.war串之间,以取代在NEW_VERSION varaiable(13.2.0/8)的内容之间的字符串的file1外壳:替补多2个已知串

脚本:

#!/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) 

文件1内容:

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

您如何知道文件内容旧版本文本的位置?我的意思是'13.2.0/9'可以是不同的字符串也不是吗? – anubhava 2013-05-08 19:41:01

+0

是的,它可以是任何字符串。我需要用新版本号 – Jill448 2013-05-08 19:53:17

+0

替换'abc_def_APP'和'application1.war'之间的sting。但是脚本如何知道文件内容应该在哪里进行替换? – anubhava 2013-05-08 19:56:35

回答

0

使用下面的sed命令有你的代表lacement:

sed -i.bak -r "s#^(.*/abc_def_APP/).*(/application1\.war.*)#\1$version1/$version2\2#" /path/file1 
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解决方案之间的区别是,AWK不需要你跳火圈,由于您的NEW_VERSION包含“/”(或任何其他字符)的变量。