我試圖評論中的所有文件中的所有printf語句從一個目錄以下列方式:桑達評論printf語句
sed -i 's/\ printf/\ \/\/printf/g' *
sed -i 's/ printf/ \/\/printf/g' *
可惜的是,這些方法沒有奏效。
我依靠我從vim替代正則表達式中得知的東西。
我知道我應該使用一個宏來完成這個任務,但現在我只需要一個快速解決方案。
我試圖評論中的所有文件中的所有printf語句從一個目錄以下列方式:桑達評論printf語句
sed -i 's/\ printf/\ \/\/printf/g' *
sed -i 's/ printf/ \/\/printf/g' *
可惜的是,這些方法沒有奏效。
我依靠我從vim替代正則表達式中得知的東西。
我知道我應該使用一個宏來完成這個任務,但現在我只需要一個快速解決方案。
您正在使用的編程語言爲您提供了啓用和禁用一段代碼的選項。使用#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
語句。
sed -i 's|^ *printf|\/\/&|' *
可以做你的一部分中首先指出,前開始的printf與最終一定的空間,線要求,但它是一個有點特殊原因的printf可能到處出現像一條線後,再/ else或乾脆其它指令,如果在同一行//
評論也follwing指令(如果不是從行首開始,但在printf
之前)所以,也許其他方式可能會更好
而不是使用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
(...)
你能告訴您的樣本輸入文件? – anubhava
我不認爲這是相關的。這些文件只是普通的C源代碼文件。 – octavian
您的輸入*的示例是*相關的。還請描述輸出的內容以及在哪些情況下你不希望替代發生。 – 2014-03-27 10:26:00