从文件中删除特殊注释之间的代码

Nic*_*DIA 1 regex bash perl replace sed

假设我有这段代码:

some code 1

// @if (debug)
code to remove
// @endif

some code 2

// @if (debug)
code to remove
// @endif

some code 2
Run Code Online (Sandbox Code Playgroud)

我想删除// @if (debug)和之间的所有代码// @endif.为此,我找到了一个sed命令,如果只有一个实例,// @if (debug)但是如果有多个实例则不起作用,因为sed不支持非贪婪匹配(因此,在上面的示例中,也会删除some code 2).这是命令:

sed -r -n '1h;1!H;${;g;s/\/\/\s*@if\s*\(\s*debug\s*\)([^\0]*?)\/\/\s*@endif//g;p;}' file_path.js > file_path.min.js
Run Code Online (Sandbox Code Playgroud)

我已经读过,我可以使用perl哪个支持非贪婪的比赛,但是我无法让它发挥作用.这是一个尝试:

perl -pe 's/\/\/\s*@if\s*\(\s*debug\s*\)([^\0]*?)\/\/\s*@endif//g' file_path.js > file_path.min.js
perl -0pe 's/\/\/\s*@if\s*\(\s*debug\s*\)([^\0]*?)\/\/\s*@endif//g' file_path.js > file_path.min.js
perl -0777 -pe 's/\/\/\s*@if\s*\(\s*debug\s*\)([^\0]*?)\/\/\s*@endif//g' file_path.js > file_path.min.js
Run Code Online (Sandbox Code Playgroud)

有关如何使其适用的任何想法sed,perl或任何其他类似的工具?

dev*_*ull 5

使用sed:

$ sed '/^\/\/ @if (debug)/,/^\/\/ @endif/d' inputfile
some code 1


some code 2


some code 2
Run Code Online (Sandbox Code Playgroud)