Go by Example: Line Filters

Un filtro de línea es un tipo común de programa que lee entrada en stdin, la procesa y luego imprime algún resultado derivado en stdout. grep y sed son filtros de línea comunes.

Aquí tienes un ejemplo de filtro de línea en Go que escribe una versión en mayúsculas de todo el texto de entrada. Puedes usar este patrón para escribir tus propios filtros de línea en Go.

package main
import (
    "bufio"
    "fmt"
    "os"
    "strings"
)
func main() {

Envolver el os.Stdin sin buffer con un escáner con buffer nos da un conveniente método Scan que avanza el escáner al siguiente token; que es la siguiente línea en el escáner predeterminado.

    scanner := bufio.NewScanner(os.Stdin)

Text devuelve el token actual, aquí la siguiente línea, de la entrada.

    for scanner.Scan() {
        ucl := strings.ToUpper(scanner.Text())

Escribe la línea en mayúsculas.

        fmt.Println(ucl)
    }

Verifica si hay errores durante Scan. El fin de archivo es esperado y no es reportado por Scan como un error.

    if err := scanner.Err(); err != nil {
        fmt.Fprintln(os.Stderr, "error:", err)
        os.Exit(1)
    }
}

Para probar nuestro filtro de línea, primero crea un archivo con algunas líneas en minúsculas.

$ echo 'hello'   > /tmp/lines
$ echo 'filter' >> /tmp/lines

Luego usa el filtro de línea para obtener líneas en mayúsculas.

$ cat /tmp/lines | go run line-filters.go
HELLO
FILTER

Siguiente ejemplo: File Paths.