파이프로 연결된 텍스트를 grep으로 처리하는 방법은 무엇입니까?

파이프로 연결된 텍스트를 grep으로 처리하는 방법은 무엇입니까?

grep과 같은 스크린 인쇄를 처리하는 스크립트를 원합니다.
다음과 같이 실행할 수 있습니다. cat file.txt 내 스크립트

아래 스크립트를 시도했지만 아무것도 인쇄되지 않았습니다.

#!/bin/bash
line=$@
echo $line 

답변1

@glemco의 답변과 같은 생각이지만 이 버전은 특수 문자(NULL 바이트 제외)에 대해 안전해야 합니다.

#!/bin/bash
while IFS= read -r line
do
  printf '%s\n' "$line"
done
  • IFS=선행 및 후행 공백이 잘리는 것을 방지하는 것입니다.
  • -r백슬래시 이스케이프 처리를 방지하는 데 사용됩니다.
  • "주변 따옴표는 "$line"전역 확장을 방지하고 공백 시퀀스가 ​​단일 공백으로 대체되는 것을 방지하기 위한 것입니다.

답변2

명령줄 인수( )에서 읽으려고 하는 $@반면, 에서 읽어야 합니다 stdin. 기본적으로 파이프는 첫 번째 명령을 stdout두 번째 명령에 추가합니다 stdin. Bash에서 원하는 작업을 수행하는 쉬운 방법은 read예제에 표시된 대로 내장 명령을 한 줄씩 사용하는 것입니다.

#!/bin/bash
while read line
do
  echo $line
done

물론 에코 없이 원하는 것은 무엇이든 할 수 있습니다.

관련 정보