簡體   English   中英

在C ++代碼中使用regex和sed命令替換'*'指針不起作用

[英]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和轉義括號的同一命令無法識別?

預先感謝您的任何建議。

sed不支持環視斷言,啟用-r標志並使用擴展的正則表達式:

sed -i -r 's/(\w+)\s*\*(\w)/\1\* \2/g'

Ideone演示

在Perl中,您可以使用環視斷言:

perl -i -pe 's/(?<=\w)\s*\*(?=\w)/\* /g'

Ideone演示

“處理C ++代碼的新手程序員”可能不應該自動執行此操作。 您是否考慮過*用於乘法的情況

name * another_name

還是取消引用?

Type t = *it;

您似乎認為C ++強制轉換放在圓括號內

(char*) name

實際上,它們通常出現在角形內

static_cast<char*>(name)

等等 ...

您可能最好手動執行此操作,以更好地了解您正在處理的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM