STDIN에서 영구 문자열을 찾는 방법

STDIN에서 영구 문자열을 찾는 방법

Bash를 사용하여 다음과 같이 /dev/urandom에서 문자열을 grep하려고 합니다.

tr -cd '[:lower:]' < /dev/urandom | grep -o 'test'

또한 시도했습니다:

tr -cd '[:lower:]' < /dev/urandom | grep -o 'test' | head -1

출력이 파일로 리디렉션되더라도 파일에 아무 것도 기록되지 않은 것처럼 grep대기가 항상 수행되는 것 같습니다 .tr> /tmp/testfile

head그러나 이전 에 구문 분석하면 grep작동합니다 .

tr -cd '[:lower:]' < /dev/urandom | head -c 10000 | grep -o 'test'

stdin이 계속 실행되는 동안 작동하게 하는 방법이 있습니까? 그렇지 않다면 grep입력이 아직 완료되지 않은 상태에서 출력을 제공하지 않는 동작은 왜 발생합니까 ?

답변1

댓글에서 설명했듯이,grep프로세스 라인:

이것grep유틸리티는 입력 파일을 검색하여 하나 이상의 패턴과 일치하는 행을 선택해야 합니다.

입력에 줄 바꿈이 포함되어 있지 않으므로 grep인수에 지정된 패턴을 확인하기 위해 줄을 끝없이 기다립니다.

head -c 1000010,000자 이후 줄을 "종료"하여 이 문제를 해결하십시오. 또 다른 해결책은 다음과 같이 입력에서 줄 바꿈을 허용하는 것입니다.제안통과모스비:

tr -cd '[:lower:]\n' < /dev/urandom | grep -o 'test'

관련 정보