簡體   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