使用shell脚本在所有文件中用2个参数替换lua函数调用

时间:2013-11-15 16:58:03

标签: shell sh

我使用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”部分之前插入它。

这样的脚本甚至可以吗?

1 个答案:

答案 0 :(得分:1)

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

\( \)表示子表达式; \1由第一个(仅在此示例中)子表达式的值替换。