2012-06-09 2 views
0

문제가있는 문자 시퀀스가 ​​포함 된 파일의 이름을 인쇄하는 작은 스크립트를 작성했습니다. 이 스크립트를보다 간결하게 만들려면 어떻게해야합니까?

#!/bin/bash 
# Finds all files in the repository that contain 
# undesired characters or sequences of characters 

pushd .. >/dev/null 

# Find Windows newlines 
find . -type f | grep -v ".git/" | grep -v ".gitmodules" | grep -v "^./lib" | xargs grep -l $'\r' 

# Find tabs (should be spaces) 
find . -type f | grep -v ".git/" | grep -v ".gitmodules" | grep -v "^./lib" | xargs grep -l $'\t' 

# Find trailing spaces 
find . -type f | grep -v ".git/" | grep -v ".gitmodules" | grep -v "^./lib" | xargs grep -l " $" 

popd >/dev/null 

나는 \의 R 또는 \의 t 또는 후행 공백에 대한 그렙 모양을함으로써 하나 개의 라인, 즉 이것을 결합 라인을 것입니다. 어떻게이 정규식을 만들겠습니까? 이스케이프 문자의 경우 특수 시퀀스를 사용해야하고 ( $'\X') 이러한 문자를 결합하는 방법을 잘 모르겠습니다 ...

저는 OS X를 실행 중이며 두 가지 모두에서 작동하는 솔루션을 찾고 있습니다. BSD 및 GNU 기반 시스템.

답변

1
find . -type f | grep -E -v ".git/|.gitmodules|^./lib" | xargs grep -E -l '$\r|$\t| $' 

'$ \ r | $ \ t | $ '이 그렇게 작동하는 것으로 보입니다. 시스템에서 작동하는 것으로 보이는 간단한 테스트가 있습니다.

grep에 -E (확장 reg-exp)를 사용하여 여러 검색 대상을 'OR'할 수 있습니다.

이전 Unix-en은 -E 옵션을 지원할 수도 있고 지원하지 않을 수도 있습니다. 따라서 플래그하는 오류 메시지가 나타나면 grep -Eegrep으로 바꿉니다.

이 정보가 도움이되기를 바랍니다.

+0

좋아요, 고마워요! –

관련 문제