我已將全局名稱空間中的類移動到特定的名稱空間中。我也改變了類名。我想將使用這些類的所有源文件轉換爲新格式。我正在考慮在Cygwin上使用sed
文件的bash
腳本或執行perl腳本。我在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語句,使用此語法:
if grep "Field_Unsigned_Short" $f;
,所以我不能做邏輯或的grep
s。
我可以執行一個嵌套的循環,但我不知道如何break
了Bash
的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
所以我在尋找如何處理包含每個源文件的建議舊的類名稱,並將其轉換爲新的名稱。 Cygwin Bash
腳本示例是首選,但Perl腳本也是可以接受的。 此外,腳本應在將轉換後的內容寫入new
文件之前製作原始源文件的備份副本。
我在Windows XP和Windows Vista上運行Cygwin。
cant你只是使用多個正則表達式的grep? grep -e「Field_Blob_Medium」-e「Field_Boolean」-e「Field_Unsigned_Int」... ? – lollinus 2010-02-22 21:45:37
以備份每個處理過的文件: sed -i.bak -f convert.sed $ f – lollinus 2010-02-22 21:47:41
'break'突破'for for循環,你可以做'if prog || prog || prog'爲邏輯OR(但在這種情況下,正則表達式更好)。 'find'通常是個不錯的主意,因爲文件名有空格時會失敗。 '把'find'變成'while'時最好。 – 2010-02-23 01:02:08