我使用Corona SDK,他们对图形库进行了更改,这意味着函数setReferencePoint()的所有实例都必须替换为2个属性“anchor.x”和“anchor.y”。 E.g
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
我收到一条错误,上面写着“命令a期望\后跟文字”,但即使我过去了,我还有另一个问题。我需要在代码中的“:setReferencePoint(display.TopLeftReferencePoint)”之前检索变量名,以便我可以在NEW字符串的“.anchorY”部分之前插入它。
这样的脚本甚至可以吗?
答案 0 :(得分:1)
OLD="\(\w*\):setReferencePoint(display.TopLeftReferencePoint)"
NEW="\1.anchorX, \1.anchorY = 0, 0"
\(
\)
表示子表达式; \1
由第一个(仅在此示例中)子表达式的值替换。