[英]Using regex and sed command to substitute ' *' pointers in C++ code is not working
我是一名新手程序員,負責處理我應該復習和研究的C ++代碼。 我要執行的基本任務之一是更改指針通知,如下所示:
char *name;
按照這個慣例:
char* name;
由於我的操作系統是Ubuntu 13.10,因此我認為regex可以勝任。 我研究了一下,並嘗試了類似以下命令的不同變體:
find ./ -type f -exec sed -i -e 's/(?<=\w)\s\*(?!\s)/\* /g' {} \;
可以理解為:在字符串中找到一個字母數字,然后與空格匹配,然后是星號,當匹配時是非空格,然后是星號和空格。 我知道不能使用替代\\ s,所以向前/向后看不會進入比賽,所以我在命令上打了一點點,但收效甚微。 我首先使用Eclipse IDE的“查找”菜單進行了嘗試,正則表達式似乎可以正確構建,因為它確實可以找到我期望的東西。 但是,當我嘗試執行該命令時,它並沒有按預期方式更改行,實際上它們保持不變,沒有被觸碰。
我也在嘗試上述情況的狹窄情況,即將強制類型更改為指針,如下所示:
(char *) another_name
進入這個
(char*) another_name
使用以下命令行:
find ./ -type f -exec sed -i -e 's/(?<=\w)\s\*(?=\))/\*/g' {} \;
但是正則表達式引擎似乎無法識別轉義的括號,因為它給了我“ sed:-e表達式#1,char 25:Unmatched)或”)。
現在,我要敲打牆壁,試圖找出解決該問題的正確方法:為什么替換未按預期工作,以及為什么在正向外觀內使用istead和轉義括號的同一命令無法識別?
預先感謝您的任何建議。
“處理C ++代碼的新手程序員”可能不應該自動執行此操作。 您是否考慮過*
用於乘法的情況
name * another_name
還是取消引用?
Type t = *it;
您似乎認為C ++強制轉換放在圓括號內
(char*) name
實際上,它們通常出現在角形內
static_cast<char*>(name)
等等 ...
您可能最好手動執行此操作,以更好地了解您正在處理的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.