Przeniosłem moje klasy z globalnej przestrzeni nazw do określonej przestrzeni nazw. Zmieniłem również nazwy klas. Chcę przekonwertować wszystkie moje pliki źródłowe, które używają tych klas, do nowego formatu. Myślałem o skrypcie bash
przy użyciu pliku sed
na Cygwin lub wykonywaniu skryptu perl. Mam problem ze skryptem bash
.Skrypt do zmiany nazw klasy C++
Oto proces próbuję wykonać:
- dla każdego pliku źródłowego, * .cpp i * .hpp, rekurencyjnie:
- Jeśli plik zawiera starą klasę nazwę, a następnie przekonwertuj plik.
- Koniec.
Mój problem w wykrywaniu wykrywa, czy plik zawiera starą nazwę klasy. Myślałam o jednym grep
rachunku dla każdej nazwy klasy:
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
Problem jest, że tylko jedno polecenie może być w Bash
if, używając następującej składni:
if grep "Field_Unsigned_Short" $f;
więc nie mogę zrobić logiczne OR z grep
.
mogłem wykonać zagnieżdżonych pętli, ale nie wiem jak break
się z Bash
pętli for:
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
więc szukam dla sugestii, w jaki sposób przetwarzać każdy plik źródłowy, który zawiera stare nazwy klas i przekonwertuj je na nowe. Przykład skryptu Cygwin Bash
jest preferowany, chociaż skrypt Perla byłby również akceptowalny. Ponadto skrypt powinien wykonać kopię zapasową oryginalnego pliku źródłowego przed zapisaniem skonwertowanej zawartości na plik new
.
Używam Cygwin na Windows XP i Windows Vista.
cant Po prostu używasz grep z wieloma regexp? grep -e "Field_Blob_Medium" -e "Field_Boolean" -e "Field_Unsigned_Int" ... ? – lollinus
aby wykonać kopię zapasową każdego przetworzonego pliku: sed -i.bak -f convert.sed $ f – lollinus
'break' zrywa z pętli' for' i możesz zrobić 'if prog || prog || prog' dla logicznego OR (ale w tym przypadku zmiana regex jest lepsza). 'dla' z' find' jest zwykle złym pomysłem, ponieważ kończy się niepowodzeniem, gdy nazwy plików mają spacje. Lepiej jest "wpadać" na 'while'. –