【发布时间】:2013-09-12 14:18:05
【问题描述】:
假设我有这个代码:
some code 1
// @if (debug)
code to remove
// @endif
some code 2
// @if (debug)
code to remove
// @endif
some code 2
我想删除// @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
我读到我可以使用支持非贪婪匹配的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
知道如何让它与sed、perl 或任何其他类似的工具一起使用吗?
【问题讨论】:
-
哦,倾斜牙签综合症的人性。
标签: regex perl bash replace sed