개행 없이 한 줄로 패턴을 스트리밍하는 스크립트가 있습니다. grep
stock_ticker
해당 줄에서 찾아서 바로 출력하고 싶습니다 . 이제 스크립트는 끝나지 않으며 기본적으로 무한 반복됩니다.
이 문제를 해결하는 또 다른 방법은 입력 스트림을 라인으로 분할하고 이를 grep으로 파이프하는 것일 수 있다고 생각합니다. 나는 당신이 출력할 수 있다는 것을 알고 있습니다 . 그러나 내 이해에 따르면 , 에서 한 줄씩 모든 것을 읽는 grep
것으로 나타났습니다 grep
.sed
awk
어쨌든 이 동작을 변경하고 작업할 수 있나요?
./a.out | grep 'stock_ticker'
현재 출력됩니다 Memory exhausted
. 이는 grep이 출력을 뱉어내기 전에 한 줄씩 읽기 때문입니다. 나는 이 행동을 바꾸고 싶다. 어떤 아이디어가 있나요?
답변1
개행 문자가 없으면 grep은 문자열이 나타나는 "라인"을 표시할 수 있도록 모든 입력을 버퍼링합니다.
두 가지 질문:
- 인접한 콘텐츠가 필요합니까?
- 토큰을 구분하는 공백이나 다른 문자가 있나요?
인접한 콘텐츠의 컨텍스트가 필요하지 않고 토큰을 구분하는 공백이 있는 경우 tr을 사용하여 공백을 개행으로 변환하세요.
./a.out | tr ' ' '\n' | grep 'stock_ticker'
인접한 콘텐츠를 원할 경우 grep 명령에 옵션 중 하나를 추가하면 됩니다 -C
-A
. -B
이렇게 하면 grep이 검색 모드에서 주식 앞 및/또는 뒤에 "라인"을 표시합니다.