使用sed从javascript文件中删除所有console.log

时间:2011-07-06 11:10:01

标签: regex bash sed

我正在尝试从我的JS文件中删除所有console.logconsole.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

它不会取代“日志”:

terminal screenshot

9 个答案:

答案 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)

我试试这个:

sed -E 's/console.(log|debug|info)( ?| +)\([^;]*\);//g'

看测试: Regex Tester

答案 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)\(([^)]+)\);

请记住在捕获组中包括其余的方法名称。