我正在尝试从我的JS文件中删除所有console.log
,console.dir
等,然后再使用YUI( on osx )进行缩小。
我为控制台语句获得的正则表达式如下所示:
console.(log|debug|info|warn|error|assert|dir|dirxml|trace|group|groupEnd|time|timeEnd|profile|profileEnd|count)\((.*)\);?
如果我使用RegExr进行测试,它就有效。
但它不适用于sed
。
我需要做些什么来改变它?
sed 's/___???___//g' <$RESULT >$RESULT_STRIPPED
更新
在得到第一个答案后我试了
sed 's/console.log(.*)\;//g' <test.js >result.js
这是有效的,但是当我添加OR
时sed 's/console.\(log\|dir\)(.*)\;//g' <test.js >result.js
它不会取代“日志”:
答案 0 :(得分:9)
您的原始表达看起来很好。对于扩展正则表达式,您只需将-E
标记传递给sed
:
sed -E 's/console.(log|debug|info|...|count)\((.*)\);?//g'
man re_format
中解释了这些类型的正则表达式之间的区别。
说实话,我从来没有读过那个页面,而只是在事情没有按预期工作时简单地使用-E
。 =)
答案 1 :(得分:2)
您必须在(
的正则表达式语法中转义|
(用于分组)和sed
(用于oring)。 E.g:
sed 's/console.\(log\|debug\|info\|warn\|error\|assert\|dir\|dirxml\|trace\|group\|groupEnd\|time\|timeEnd\|profile\|profileEnd\|count\)(.*);\?//g'
更新示例:
$ sed 's/console.\(log\|debug\|info\|warn\|error\|assert\|dir\|dirxml\|trace\|group\|groupEnd\|time\|timeEnd\|profile\|profileEnd\|count\)(.*);\?//g'
console.log # <- input line, not matches, no replacement printed on next line
console.log
console.log() # <- input line, matches, no printing
console.log(blabla); # <- input line, matches, no printing
console.log(blabla) # <- input line, matches, no printing
console.debug(); # <- input line, matches, no printing
console.debug(BAZINGA) # <- input line, matches, no printing
DATA console.info(ditto); DATA2 # <- input line, matches, printing of expected data
DATA DATA2
HTH
答案 2 :(得分:1)
我也找到了删除所有console.log的方法, 而我正在尝试使用python来做到这一点, 但我发现正则表达式不起作用。 我的写作是这样的:
var re = / ^ console.log(。*);?$ /;
但它将匹配以下字符串:
<强> '的console.log(23);警报(234dsf);'强>
有用吗?用
“S /控制台(登录|调试|资讯| ... |计数)((*)); // G”
答案 3 :(得分:1)
答案 4 :(得分:1)
这是我的实施
for i in $(find ./dir -name "*.js")
do
sed -E 's/console\.(log|warn|error|assert..timeEnd)\((.*)\);?//g' $i > ${i}.copy && mv ${i}.copy $i
done
从github获取sed的东西
答案 5 :(得分:0)
我感到很懒,希望找到一个可以复制的脚本。糊。唉,没有一个,所以对于像我这样的懒人,这是我的。它在一个名为'minify.sh'的文件中,与要缩小的文件位于同一目录中。它将覆盖原始文件,并且需要可执行。
#!/bin/bash
for f in *.js
do
sed -Ei 's/console.(log|debug|info)\((.*)\);?//g' $f
yui-compressor $f -o $f
done
答案 6 :(得分:0)
我想在此处补充一下,我遇到了与windowd.console.log等命名空间的console.logs有关的问题。此外,Tweenmax.js在某些部分(例如
)中有一些有趣的console.log用法 window.console&&console.log(t)
所以我用了这个
sed -i.bak s/[^\&a-zA-Z0-9\.]console.log\(/\\/\\//g js/combined.js
正则表达式有效地说取代所有不以&amp;,alphanumerics和。开头的console.logs。带有'//'注释,uglify稍后会取出。
答案 7 :(得分:0)
Rodrigocorsi使用嵌套括号。我加了一个?之后 ;因为yuicompressor省略了一些分号。
答案 8 :(得分:0)
这可能不起作用的原因是您没有“限制”
正则表达式在方法参数中不包含右括号()
)。
尝试以下正则表达式:
console\.(log|trace|error)\(([^)]+)\);
请记住在捕获组中包括其余的方法名称。