2013-04-25 70 views
0
$ grep "console.log" * -R 
account/db.js:  console.log(err); 
account/db.js:  console.log(info); 
account/db.js:    console.log(err); 
account/db.js:     console.log(err2); 
account/controller.js: console.log(covers); 
account/controller.js: console.log(req.api_user); 
account/controller.js: console.log(code); 
account/controller.js:  console.log(user); 
account/helper.js:    console.log(err); 
messages/db.js:  console.log("Error " + err); 
messages/helper.js:    console.log('No email notify.'); 
messages/helper.js:    console.log(msg_body); 
messages/helper.js:      console.log(message.sid); 
messages/helper.js:      console.log(message.dateCreated); 
messages/helper.js:      console.log(error); 
products/controller.js:   console.log(product); 
products/controller.js:    console.log(product); 
products/helper.js:  console.log(data) 
products/helper.js: console.log('removing index....'); 
profile/db.js:    console.log(err); 
profile/db.js:    console.log(info); 
profile/db.js:    console.log(err); 
profile/controller.js:       console.log("sending phone confirmation text..."); 
profile/helper.js:   console.log(message.sid); 
profile/helper.js:   console.log(message.dateCreated); 
profile/helper.js:   console.log(error); 
receiver/controller.js: console.log(from); 
receiver/controller.js: console.log(body); 
receiver/controller.js:  console.log(from_email); 
receiver/controller.js:  console.log(to_id_gen); 
receiver/controller.js:  console.log(finalbody); 
receiver/controller.js:       console.log(result); 
reviews/db.js:  console.log(err); 
reviews/db.js:  console.log(results); 
reviews/controller.js:   console.log(review); 
reviews/controller.js: console.log(review_id); 
search/controller.js:  console.log(JSON.stringify(data.hits.hits, null, 4)); 

正如你所看到的,當我寫代碼時,我在任何地方都在做console.log。如何從每個文件中刪除具有匹配文本的行?

現在,我想刪除所有這些行。我不想手動進入每個文件來刪除它們。相反,我想通過一個命令來完成。

grep "console.log" * -R類似,我該如何做同樣的事情,但遞歸地刪除這些行? (從當前目錄中查看每個文件一直到樹上)

回答

1

嘗試find這樣的事情。嘗試find . -type f -exec sed -i '/console\.log/d' {} \;但你可能有興趣使用-i.bak代替-i這使一個備份副本

+0

'find -name \ * .js -type f -exec sed -i.bak'/console\.log/d'{} +'可能更有效。 – jfs 2013-04-25 07:08:06

+1

是的,起初它似乎是從提供的例子。但後來我注意到在grep中的任何地方,他沒有使用文件擴展名,或者沒有提到任何地方只有* js文件是目標。所以我決定不做任何事情,並跳過了-name選項。 – abasu 2013-04-25 07:12:44

0

給這個鏡頭。

sed -i.bak '/console.log/d' */*.js 

-i param編輯文件到位。原始文件的名稱後面會附加.bak,所以如果出現問題,您可以恢復它,或者改變主意。

這不是一個正確的遞歸解決方案;您可能需要修改文件名通配符,或者驅動來自find . -exec ...包裝器的命令以使其遞歸。

+0

它這樣說:sed的:無法編輯帳戶:不是一個普通的文件 – TIMEX 2013-04-25 04:30:35

+0

這不是一個遞歸解決方案, – abasu 2013-04-25 04:45:18

+0

@abasu:對於遞歸,你可以使用'zsh'和'sed -i'/console.log/d'**/* .js' glob模式 - 比'find'更加清潔.... – 2013-04-25 05:02:21

0

在Perl:

perl -i -n -e'print unless /console\.log/' $(find . -name '*.js') 
相關問題