2013-11-15 2 views
0

저는 Corona SDK를 사용하여 그래픽 라이브러리를 변경했습니다. 즉, 함수 setReferencePoint()의 모든 인스턴스를 2 개의 속성 " anchor.x "및"anchor.y "입니다. 예컨대lua 함수 호출을 쉘 스크립트를 사용하는 모든 파일에서 2 개의 매개 변수로 바꿉니다

thePlayer:setReferencePoint(display.TopLeftReferencePoint) 

thePlayer.anchorX, thePlayer.anchorY = 0, 0 

내 프로젝트 중 일부는 setReferencePoint()의 인스턴스의 수백되고, 그래서 자동으로 나를 위해 모든 인스턴스를 대체 할 스크립트를 만들기 위해 노력했다. 그러나 나는 쉘 스크립트에 대한 많은 경험이 없기 때문에 아직 많은 운이 없었습니다. I라는 오류를 받고 있어요

#!/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)"전에 변수 이름을 검색해야하므로 새 문자열의 ".anchorY"부분 앞에 삽입 할 수 있습니다.

이렇게 스크립트에서 가능한가요?

답변

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

\(\) 서브 표현식을 나타낸다; \1은 첫 번째 (이 예제에서만) 부 표현식의 값으로 대체됩니다.

관련 문제