2012-04-03 120 views
0

我有一個路徑,我用pwd命令檢索,我必須在我的shell腳本中修改該路徑運行時。爲了讓我們假設我有/var/www/cgi-script,我必須在/var/www/etc中修改它。我試圖做的是檢索「/」的最後一個索引,取一個子字符串,然後添加。我嘗試了awk幾次,但我似乎無法找到解決方案。有沒有辦法使用反向索引?awk的子串和反向索引

path=`pwd`; 
char="/" 
pathindex=`awk -v a="$path" -v b="$char" 'BEGIN { print index(a,b)}'` 

回答

4

退房dirname

$ pwd 
/var/www/cgi-script 
$ echo $PWD 
/var/www/cgi-script 
$ echo `dirname $PWD`/etc 
/var/www/etc 
+0

你先生是個天才。非常感謝! – raz3r 2012-04-03 08:36:15

3

@AndersLindahl有正確的答案。要做到這一點在AWK:

newpath=$(awk -F $char -v OFS=$char '{$NF="etc"; print}' <<< "$path") 
0

我的情況有點不同,我已經在代碼 - 這是來不及做新的FS。我有一個人的名字有一個未知數量的單詞,但最後一個單詞是他們的姓氏,需要被「/」包圍。

a=split(prsn,x," ") # Split into 'x' based on a space, 'a'=number of words 
    prsn=""    # reset variable to null 
    for (j=1;j<a;j++) { # loop through and concatenate all but the last word 
        prsn=sprintf("%s %s",prsn,x[j]) 
        } 
    prsn=substr(prsn,2) # we got an extra space in there at the beginning - lose it 
    prsn=sprintf("%s /%s/",prsn,x[a]) # format the final name 
    print "1 NAME " prsn # print it 
+0

你是什麼意思「太遲做一個新的FS」? – 2012-10-11 16:26:45