Line Filters - 线路滤波器
线路滤波器 {.zh}
line filter是一种常见的程序类型,它读取stdin上的输入,处理它,然后将一些衍生的结果打印到stdout。 grep
和sed
是公共线过滤器。这是Go中的一个示例行过滤器,用于写入所有输入文本的资本化版本。您可以使用此模式编写自己的Go行过滤器。
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
使用bufferedscanner包装无缓冲的os.Stdin
为我们提供了一种方便的Scan
方法,可以将扫描器提供给下一个令牌;这是默认扫描仪中的下一行。
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
Text
从输入返回当前标记,这里是下一行。
ucl := strings.ToUpper(scanner.Text())
写出大写的线。
fmt.Println(ucl)
}
在“扫描”期间检查错误。文件结束是预期的,并且不会被“扫描”报告为错误。
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