Line Filters - 线路滤波器
线路滤波器 {.zh}
line filter是一种常见的程序类型,它读取stdin上的输入,处理它,然后将一些衍生的结果打印到stdout。 grep和sed是公共线过滤器。这是Go中的一个示例行过滤器,用于写入所有输入文本的资本化版本。您可以使用此模式编写自己的Go行过滤器。
package mainimport ("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.goHELLOFILTER
