![파이프로 연결된 텍스트를 grep으로 처리하는 방법은 무엇입니까?](https://linux55.com/image/193025/%ED%8C%8C%EC%9D%B4%ED%94%84%EB%A1%9C%20%EC%97%B0%EA%B2%B0%EB%90%9C%20%ED%85%8D%EC%8A%A4%ED%8A%B8%EB%A5%BC%20grep%EC%9C%BC%EB%A1%9C%20%EC%B2%98%EB%A6%AC%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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
물론 에코 없이 원하는 것은 무엇이든 할 수 있습니다.