2014-03-27 110 views
-1

我試圖評論中的所有文件中的所有printf語句從一個目錄以下列方式:桑達評論printf語句

sed -i 's/\ printf/\ \/\/printf/g' * 

sed -i 's/ printf/ \/\/printf/g' * 

可惜的是,這些方法沒有奏效。

我依靠我從vim替代正則表達式中得知的東西。

我知道我應該使用一個宏來完成這個任務,但現在我只需要一個快速解決方案。

+0

你能告訴您的樣本輸入文件? – anubhava

+1

我不認爲這是相關的。這些文件只是普通的C源代碼文件。 – octavian

+2

您的輸入*的示例是*相關的。還請描述輸出的內容以及在哪些情況下你不希望替代發生。 – 2014-03-27 10:26:00

回答

1

您正在使用的編程語言爲您提供了啓用和禁用一段代碼的選項。使用#define來啓用/禁用printf語句,而不是操縱源。

將全部替換爲printf,例如,

printf("Some value %d", val); 

if (TOPRINT) printf("Some value %d", val); 

其是微不足道s|printf|if (TOPRINT) &|一次性更換。

雖然編譯代碼,如果你要啓用printf S,說:

gcc -DTOPRINT foo.c 

無需進行任何後續修改的源註釋/取消註釋printf語句。

0
sed -i 's|^ *printf|\/\/&|' * 

可以做你的一部分中首先指出,前開始的printf與最終一定的空間,線要求,但它是一個有點特殊原因的printf可能到處出現像一條線後,再/ else或乾脆其它指令,如果在同一行//評論也follwing指令(如果不是從行首開始,但在printf之前)所以,也許其他方式可能會更好

1

而不是使用cludgy hack來修改sed的源代碼,我建議使用專門製作的適當的強大工具來進行代碼轉換,如 Coccinelle

這是非常簡單的通過使用宏做什麼你描述爲一個妥善的解決辦法:

$ spatch --sp-file test.cocci test.c 
init_defs_builtins: /usr/share/coccinelle/standard.h 
HANDLING: test.c 
diff = 
--- test.c 
+++ /tmp/cocci-output-27579-c89047-test.c 
@@ -1,7 +1,7 @@ 

void f(void) 
{ 
-  printf("hello\n"); 
+  MY_PRINTF_MACRO("hello\n"); 
     real_work(); 
-  printf("goodbye\n"); 
+  MY_PRINTF_MACRO("goodbye\n"); 
} 
$ 

與含test.cocci文件:

@@ 
@@ 
- printf 
+ MY_PRINTF_MACRO 
    (...)