我正在尝试使用sed删除所有出现的
#ifdef _WIN32
#endif
#ifdef和#endif之间存在的所有内容都是空行。我使用sed的经验有限,我已经阅读了关于多线功能的一些文档,但我似乎无法弄明白。任何帮助表示赞赏!
答案 0 :(得分:5)
您可以尝试sed -e '/^#ifdef _WIN32/,/^#endif/d'
,但它不会推广到更复杂的嵌套案例。
答案 1 :(得分:4)
对于这项工作,我建议使用专为此工作设计的工具 - 而不是sed
。
使用coan;它有一种选择性地编辑#ifdef
和#ifndef
以及#if
和#elsif
行的模式。例如,您使用:
coan source -U_WIN32 sourcefile.c
这将处理所有_WIN32
部分,只留下必要的部分。
另请参阅我的相关问题:Is there a C pre-processor which eliminates #ifdef blocks based on values defined/undefined?
答案 2 :(得分:2)
如果存在 想要删除的#ifdef _WIN32/#endif
对之间存在非空行的对,请使用以下内容:
sed 'N;N;s/\n#ifdef _WIN32\n[[:space:]]*\n#endif\n/\n/;P;D'
this is the first line
#ifdef _WIN32
// Don't delete this comment!
#endif
stuff here
more stuff here
#ifdef _WIN32
#endif
last line
$ sed 'N;N;s/\n#ifdef _WIN32\n[[:space:]]*\n#endif\n/\n/;P;D' ifdef.sed
this is the first line
#ifdef _WIN32
// Don't delete this comment!
#endif
stuff here
more stuff here
last line