繁体   English   中英

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

[英]Using sed to remove all console.log from javascript file

我正在尝试从我的 JS 文件中删除我所有的console.logconsole.dir等,然后再用 YUI (在 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

它不会取代“日志”:

终端截图

你原来的表情看起来不错。 您只需将-E标志传递给sed ,用于扩展正则表达式:

sed -E 's/console.(log|debug|info|...|count)\((.*)\);?//g'

这些类型的正则表达式之间的区别在man re_format中进行了解释。 老实说,我从未阅读过该页面,而是在事情没有按预期工作时简单地加上-E =)

您必须在sed的正则表达式语法中转义( (用于分组)和| (用于 oring)。例如:

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

我试试这个:

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

查看测试:正则表达式测试器

这是我的实现

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 东西

我还找到了删除所有 console.log 的方法,我正在尝试使用 python 来执行此操作,但我发现 Regex 不适用于。 我的写作是这样的:

var re=/^console.log(.*);?$/;

但它将匹配以下字符串:

'console.log(23);alert(234dsf);'

它有效吗?

"s/console.(log|debug|info|...|count)((.*));?//g"

我感到很懒,希望找到一个脚本来复制和粘贴。 唉,没有一个,所以对于像我这样的懒人来说,这是我的。 它位于与要缩小的文件相同的目录中名为“minify.sh”的文件中。 它将覆盖原始文件并且它需要是可执行的。

#!/bin/bash

for f in *.js
do
    sed -Ei 's/console.(log|debug|info)\((.*)\);?//g' $f
    yui-compressor $f -o $f
done

我想在这里补充一点,我遇到了命名空间控制台日志的问题,例如 window.console.log。 此外,Tweenmax.js 在某些部分对 console.log 有一些有趣的用途,例如

       window.console&&console.log(t)

所以我用了这个

  sed -i.bak s/[^\&a-zA-Z0-9\.]console.log\(/\\/\\//g js/combined.js

正则表达式有效地表示替换所有不以 &、字母数字和和开头的 console.logs。 带有 '//' 注释,稍后将 uglify 删除。

Rodrigocorsi 的作品带有嵌套的括号。 我加了一个? 之后; 因为 yuicompressor 省略了一些分号。

这可能不起作用的原因是您没有“限制”正则表达式在方法参数中不包含右括号 ( )

试试这个正则表达式:

console\.(log|trace|error)\(([^)]+)\);

请记住在捕获组中包含方法名称的 rest。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM