A line filter is a common type of program that reads input on stdin, processes it, and then prints some derived result to stdout. grep and sed are common line filters.
// Here’s an example line filter in Go that writes
// a capitalized version of all input text.
// You can use this pattern to write your own Go line filters.
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
// Wrapping the unbuffered os.Stdin
// with a buffered scanner gives us a convenient Scan method
// that advances the scanner to the next token
// which is the next line in the default scanner.
scanner := bufio.NewScanner(os.Stdin)
// Text returns the current token, here the next line, from the input.
for scanner.Scan() {
ucl := strings.ToUpper(scanner.Text())
// Write out the uppercased line.
fmt.Println(ucl)
}
// Check for errors during Scan.
// End of file is expected and not reported by Scan as an error.
if err := scanner.Err(); err != nil {
fmt.Fprintln(os.Stderr, "error:", err)
os.Exit(1)
}
}
To try out our line filter, first make a file with a few lowercase lines.
Then use the line filter to get uppercase lines.
$ echo 'hello' > /tmp/lines
$ echo 'filter' >> /tmp/lines
$ cat /tmp/lines | go run line-filters.go
HELLO
FILTER
Source | License