Line Filters->라인 필터
#
// _라인 필터 (line filter)_는 stdin으로 입력을 읽고, 처리한 후, 나온 결괏값을 stdout으로 출력하는 일반적인 유형의 프로그램입니다.
// `grep`과 `sed`가 일반적인 라인 필터입니다.
// 다음은 모든 입력 텍스트의 대문자 버전을 작성하는 Go의 라인 필터 예제입니다.
// 여러분만의 Go 라인 필터를 작성하는데 이 패턴을 사용할 수 있습니다.
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
// 버퍼링되지 않은 `os.Stdin`을 버퍼링된 스캐너로 래핑하는건 스캐너를 다음 토큰으로 진행시키는 편리한 `Scan` 메서드를 제공합니다.
// 기본 스캐너에서 다음 토큰은 다음 라인입니다.
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
// `Text`는 입력에서 현재 토큰을 반환합니다. 여기선 다음 라인입니다.
ucl := strings.ToUpper(scanner.Text())
// 대문자로된 문자열을 라인에 씁니다.
fmt.Println(ucl)
}
// `Scan`중 에러를 체크합니다. 파일의 끝이 예상되며 `Scan`에 의한 에러로 보고되지 않습니다.
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "error:", err)
os.Exit(1)
}
}
# 라인 필터를 실행해 보기위해, 몇 개의 소문자 라인들을 가진 파일을 생성합니다.
$ echo 'hello' > /tmp/lines
$ echo 'filter' >> /tmp/lines
# 다음으로 대문자 라인들을 얻기 위해 라인 필터를 사용합니다.
$ cat /tmp/lines | go run line-filters.go
HELLO
FILTER