2013-04-25 5 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을 시도합니다.

+0

'find -name \ * .js -type f -exec sed -i.bak '/console\.log/d'{} +'가 더 효율적일 수 있습니다. – jfs

+1

네, 처음에는 제공된 예제에서 그렇게 보였습니다. 하지만 grep 어디서나 파일 확장자를 사용하지 않았거나 * js 파일 만 대상으로 언급하지 않았습니다. 그래서 나는 아무것도 가정하지 않기로 결정하고 -name 옵션을 건너 뛰었습니다. – abasu

0

사진을주세요.

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

-i param은 파일을 편집합니다. 원본 파일의 이름 뒤에 .bak이 붙어있어 잘못되거나 무언가가 생기면 복원 할 수 있습니다.

이것은 올바르게 재귀적인 해결책이 아닙니다. 파일 이름 와일드 카드를 수정하거나 재귀 적으로 만들기 위해 find . -exec ... 랩퍼에서 명령을 실행해야 할 수도 있습니다. 펄에서

+0

그것은 말한다 find . -type f -exec sed -i '/console\.log/d' {} \;하려고하지만 당신은 백업 사본을 유지하는 대신 -i-i.bak 사용에 관심을 가질만한이 : 나오지도 : 계정을 편집 할 수 있습니다 :이 아닌 일반 파일 – TIMEX

+0

을이 재귀 해결책이 아니다, – abasu

+0

@abasu : 재귀를 위해서'zsh'와'sed -i '/console.log/d'**/* .js' glob 패턴을 사용할 수 있습니다 -'find'를 사용하여 주위를 채우는 것보다 더 깔끔합니다 .... –

0

는 :

perl -i -n -e'print unless /console\.log/' $(find . -name '*.js') 
관련 문제