2013-05-08 69 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包含「/」(或任何其他字符)的變量。