2013-11-15 36 views
0

我使用Corona SDK,他們對其圖形庫進行了更改,這意味着函數setReferencePoint()的所有實例都必須替換爲2個屬性「 anchor.x「和」anchor.y「。 E.g使用shell腳本在所有文件中用2個參數替換lua函數調用

thePlayer:setReferencePoint(display.TopLeftReferencePoint) 

成爲

thePlayer.anchorX, thePlayer.anchorY = 0, 0 

我的一些項目有上百個setReferencePoint()的情況下,所以我試圖讓一個腳本,會自動替換所有實例我。但是我對shell腳本沒有太多經驗,所以我還沒有太多運氣。這是我目前的腳本:

#!/bin/bash 
OLD=":setReferencePoint(display.TopLeftReferencePoint)" 
NEW=".anchorX, .anchorY = 0, 0" 
DPATH="/Users/me/Desktop/game/*.lua" 
BPATH="/Users/me/Desktop/game/new" 
[ ! -d $BPATH ] && mkdir -p $BPATH || : 
for f in $DPATH 
do 
    if [ -f $f -a -r $f ]; then 
    /bin/cp -f $f $BPATH 
    sed -i "s/$OLD/$NEW/g" "/Users/me/Desktop/game/new/$f.lua" 
    else 
    echo "Error: Cannot read $f" 
    fi 
done 

我得到它說的錯誤「指揮預計\後跟文本」,但即使我拿過去,我有另外一個問題。我需要在代碼中的「:setReferencePoint(display.TopLeftReferencePoint)」之前檢索變量名,以便我可以在NEW字符串的「.anchorY」部分之前插入它。

這是甚至可能在這樣的腳本?

回答

1
OLD="\(\w*\):setReferencePoint(display.TopLeftReferencePoint)" 
NEW="\1.anchorX, \1.anchorY = 0, 0" 

\(\)表示一個子表達式; \1被替換爲第一個(僅在此示例中)子表達式的值。

相關問題