2014-04-09 2 views
0

나는 주어진 디렉토리와 함께 실행할 수있는 간단한 명령 행 스크립트 또는 쉘 스크립트를 찾고 있는데, 모든 디렉토리, 하위 디렉토리를 탐색하여 .rb 파일을 찾고 들여 쓰기를 수행합니다. 현재 들여 쓰기에 관계없이 두 개의 공백들여 쓰기 명령 줄 스크립트

그런 다음 HTML, ERB와의 js 파일 (뿐만 아니라 이하/말대꾸)을 찾아서 (4)

에 들여 쓰기를해야이 뭔가 간단한 그게 전부 또는 그냥 엔지니어링 위에 생각인가? 나는 bash를 잘 모릅니다, 나는 전에 뭔가를 만들려고 노력했지만, 내 친구는 grep을 사용한다고 말하면서 길을 잃었습니다. 어떤 도움? 다음

당신이 (안전을 위해 백업을) 파일을 덮어 쓸 수있는 -i 옵션 GNU sed을 가지고있는 경우에

답변

2

:

find . -name '*.rb' -exec sed -i .bak 's/^/ /' {} + 

find . -name '*.html' -exec sed -i .bak 's/^/ /' {} + 

find 파일 이름의 목록을 생성; sed 명령을 실행하고 파일 (-i .bak)을 백업하고 요청 된대로 해당 대체를 수행합니다. +은 '한 번에 여러 파일을 편리하게 처리'한다는 의미입니다. 이렇게하면 파일 이름에 공백이있는 문제를 피할 수 있습니다.

+1

질문에 "현재 들여 쓰기에 관계없이"라고 쓰여 있으므로's/^ [^ I] *//'(여기서^I는 리터럴 탭입니다.)라고 생각합니다. –

+0

@WilliamPursell : 오, 사람들은 여전히 ​​탭을 사용하고 있습니까? 기이 한! 예; 줄 시작 부분에 탭이 있으면 탭 뒤의 공백을 원하게됩니다. 하지만 수정 된 정규 표현식은's/^ [^ I * */& /'] 여야합니다. 그렇지 않으면 기존 들여 쓰기를 모두 취소하고 두 개의 공백으로 대체하게됩니다. –

+0

나는이 질문을 해석하여 새로운 들여 쓰기가 이전 들여 쓰기를 버려야 함을 의미하므로'&'는 바람직하지 않습니다. 해석이 정확한 경우 원래 정규식이'&'를 추가하는 것보다 훨씬 적합합니다. –