grep - 캐리지 리턴을 새 줄로 인식합니다.

grep - 캐리지 리턴을 새 줄로 인식합니다.

특정 문자열이 포함된 PHP 파일을 찾기 위해 유닉스를 실행하는 웹 서버를 검색하고 싶습니다. 일반적으로 나는 이 작업을 수행하기 위해 다음 명령을 사용합니다.

찾다. -name "*.php" -print0 | xargs -0 grep -H -i "검색할 문자열"

이것은 지금까지 훌륭하게 작동했지만 이제는 모든 PHP 스크립트에 줄 바꿈이 없고 캐리지 리턴만 있는 서버에 갇혀 있습니다. grep은 캐리지 리턴을 새 줄로 인식하지 못하는 것 같습니다. 따라서 파일에 일치하는 항목이 있으면 위 명령은 줄뿐만 아니라 파일의 전체 내용을 인쇄합니다.

어떤 도움이라도 대단히 감사하겠습니다!

답변1

매우 효율적이지는 않지만 작동해야 합니다.

find . -name '*.php' -exec bash -c "grep 'pattern' <(tr '\r' '\n' <{})" \;

파일 이름을 표시하는 다른 방법은 다음과 같습니다.

find . -name '*.php' -exec bash -c "grep 'pattern' <(tr '\r' '\n' <'{}') |
    sed s+^+'{}':\ +" \;

관련 정보