한 줄에 Grep

한 줄에 Grep

개행 없이 한 줄로 패턴을 스트리밍하는 스크립트가 있습니다. grep stock_ticker해당 줄에서 찾아서 바로 출력하고 싶습니다 . 이제 스크립트는 끝나지 않으며 기본적으로 무한 반복됩니다.

이 문제를 해결하는 또 다른 방법은 입력 스트림을 라인으로 분할하고 이를 grep으로 파이프하는 것일 수 있다고 생각합니다. 나는 당신이 출력할 수 있다는 것을 알고 있습니다 . 그러나 내 이해에 따르면 , 에서 한 줄씩 모든 것을 읽는 grep것으로 나타났습니다 grep.sedawk

어쨌든 이 동작을 변경하고 작업할 수 있나요?

./a.out | grep 'stock_ticker'

현재 출력됩니다 Memory exhausted. 이는 grep이 출력을 뱉어내기 전에 한 줄씩 읽기 때문입니다. 나는 이 행동을 바꾸고 싶다. 어떤 아이디어가 있나요?

답변1

개행 문자가 없으면 grep은 문자열이 나타나는 "라인"을 표시할 수 있도록 모든 입력을 버퍼링합니다.

두 가지 질문:

  • 인접한 콘텐츠가 필요합니까?
  • 토큰을 구분하는 공백이나 다른 문자가 있나요?

인접한 콘텐츠의 컨텍스트가 필요하지 않고 토큰을 구분하는 공백이 있는 경우 tr을 사용하여 공백을 개행으로 변환하세요.

./a.out | tr ' ' '\n' | grep 'stock_ticker'

인접한 콘텐츠를 원할 경우 grep 명령에 옵션 중 하나를 추가하면 됩니다 -C -A. -B이렇게 하면 grep이 검색 모드에서 주식 앞 및/또는 뒤에 "라인"을 표시합니다.

관련 정보