대괄호를 사용하여 파일 항목 이름 바꾸기

대괄호를 사용하여 파일 항목 이름 바꾸기

저는 macOS X를 사용하고 있는데, 이것을 터미널에 입력하여 일부 항목의 이름을 바꿉니다.

find /Users/Ad//Desktop/Project/src/ -type f -name '*.java' -exec perl -pi -w -e 's/getGreenObject()/newObject("green")/g;' {} \;

모두 이름을 바꿔야 합니다.

getGreenObject()

~와 함께

newObject("green")

하지만 getGreenObject()를 다음으로 대체한 것입니다.

newObject("green")()

이로 인해 수많은 오류가 발생했습니다. 명령이 열기 및 닫기 대괄호 "()"를 인식하지 못하는 것 같나요?

이제 동일한 명령으로 이러한 모든 오류를 어떻게 해결할 수 있습니까?

답변1

괄호는 일치하는 리터럴 문자가 아니라 정규식 구문의 일부로 처리됩니다(해당 내용을 그룹으로 처리해야 함을 나타냄). 정규식 파서가 이를 리터럴 문자로 처리하도록 지시하려면 백슬래시를 사용하여 이스케이프할 수 있습니다.

find /Users/Ad//Desktop/Project/src/ -type f -name '*.java' -exec perl -pi -w -e 's/getGreenObject\(\)/newObject("green")/g;' {} \;

지금: 이 일이 발생하기 전의 백업이 있으므로 돌아가서 다시 시도할 수 있습니까? 이와 같은 대량 변경을 수행할 때는 항상 백업이 최신 상태인지 확인하고(백업이 있습니까?) 기본 코드 기반에서 느슨하게 설정하기 전에 작은 테스트를 실행해야 합니다.

돌아갈 백업이 없다면 다음과 같이 해결할 수 있습니다.

find /Users/Ad//Desktop/Project/src/ -type f -name '*.java' -exec perl -pi -w -e 's/newObject\("green"\)\(\)/newObject("green")/g;' {} \;

내가 아마도 말했다는 점에 유의하십시오. 여기에도 동일한 권장 사항이 적용됩니다. 먼저 최신 백업이 있는지 확인하고 먼저 몇 가지 파일에서 테스트하세요. 그래요~ 아니다이로 인해 코드 베이스가 되돌릴 수 없게 파쇄되면 책임이 있습니다.

관련 정보