# If you'd like to omit non-matching lines from the result; add ';d' to the end of the expression.
sed -E 's/(?:^ *(?:\/\*\*[^\/\n]*\r?\n(?:[^\/\n]*\r?\n)*[^\/\n]*\*\/ *|\/\/.*)\r?\n)+(?: *[\r?\n])*#ifdef BUILD_FLAG\r?\n[\s\S]*?^#endif\r?\n//gm;t' <<< " Code here
and here
//this is s comment block
/**
*and a nested comment block
*/
//-----------------------------------------------------------------------------
// this comment block should not be captured
//-----------------------------------------------------------------------------
//-----------------------------------------------------------------------------
// this whole comment block and the conditional block below should be captured
//-----------------------------------------------------------------------------
/**
* @brief Some comment
*
xxxxx
* @return
*/
//-----------------------------------------------------------------------------
#ifdef BUILD_FLAG
...
#endif
More code
More code
//---------------------------------------------------------
// this whole comment block and the conditional block below should be captured
// --------------------------------------------------------
#ifdef BUILD_FLAG
...
#endif
More code
//-------------------------------------------------------------------------
/**
* @name this whole block comment should be captured.
* @{
*/
#ifdef BUILD_FLAG
...
#endif
"
Please keep in mind that these code samples are automatically generated and are not guaranteed to work. If you find any syntax errors, feel free to submit a bug report. For a full regex reference for SED, please visit: https://www.gnu.org/software/sed/manual/html_node/The-_0022s_0022-Command.html