클래스를 전역 네임 스페이스에서 특정 네임 스페이스로 이동했습니다. 클래스 이름도 변경했습니다. 이 클래스를 사용하는 모든 소스 파일을 새로운 형식으로 변환하려고합니다. Cygwin에서 sed
파일을 사용하거나 perl 스크립트를 실행하여 bash
스크립트를 생각하고있었습니다. bash
스크립트에 문제가 있습니다. 다음, C++ 클래스 이름을 변경하기위한 스크립트
-
각 소스 파일에 대해
- , * cpp를하고 * .HPP을, 다음은 내가 수행하기 위해 노력하고있어 프로세스의 파일을 변환하십시오.
- 로 끝납니다.
Bash
내 문제는 파일에 이전 클래스 이름이 들어 있는지 감지하고 있습니다. 나는 각 클래스 이름에 대해 하나의 grep
문의 생각 :
for f in `find . -iname \*.[ch]pp`;
do
if [ grep "Field_Blob_Medium" $f -eq 0 || grep "Field_Boolean" ]; then
sed -f conversion.sed $f
fi
done
문제로 문은,이 구문을 사용하는 경우 하나의 명령 Bash
될 수 있다는 것입니다 :
if grep "Field_Unsigned_Short" $f;
그래서 난 할 수 없어 논리합은 grep
입니다.
나는 중첩 루프를 수행 할 수 있습니다,하지만 난 방법을 break
Bash
중 루프 모른다 :
OLD_CLASS_NAMES="Field_Blob_Medium Field_Boolean Field_Unsigned_Int"
for f in `find . -iname \*.[ch]pp`;
do
for c_name in $OLD_CLASS_NAMES;
do
if grep $c_name $f then
sed -f convert.sed $f # <-- Need to break out of inner loop after this execution.
fi
done
done
그래서 내가 포함하는 모든 소스 파일을 처리하는 방법에 대한 제안을 찾고 있어요를 오래된 클래스 이름을 새 클래스로 변환합니다. Cygwin Bash
스크립트 예제가 선호되지만 Perl 스크립트도 사용할 수 있습니다. 또한 스크립트는 변환 된 내용을 new
파일에 쓰기 전에 원본 원본 파일의 백업 복사본을 만들어야합니다.
Windows XP 및 Windows Vista에서 Cygwin을 실행 중입니다.
캔트 grep을 여러 regexp와 함께 사용 하시겠습니까? grep -e "Field_Blob_Medium"-e "Field_Boolean"-e "Field_Unsigned_Int"... ? – lollinus
모든 처리 된 파일의 백업을 만들 수 있습니다 : sed -i.bak -f convert.sed $ f – lollinus
'break'는'for' 루프에서 빠져 나오고'if prog || prog || prog' (또는 정규 표현식을 사용하는 것이 좋습니다.) 'for '와'find'는 일반적으로 파일 이름에 공백이있을 때 실패하기 때문에 나쁜 생각입니다. 'find'를'while'으로 파이프하는 것이 더 좋습니다. –