Go в примерах: Строковые фильтры (Line Filters)

Строковый фильтр - это типичный тип программы, которая читает входные данные в stdin, обрабатывает их и затем выводит некоторый производный результат в стандартный вывод. grep и sed - это обычные строковые фильтры.

Вот пример строкового фильтра в Go, который записывает заглавную версию всего входного текста. Вы можете использовать этот шаблон для написания ваших собственных фильтров Go.

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

Обертывание небуферизованного os.Stdin буферизованным сканером дает нам удобный метод сканирования Scan, который продвигает сканер к следующему токену; который является следующей строкой в сканере по умолчанию.

    scanner := bufio.NewScanner(os.Stdin)

Text возвращает текущий токен, из ввода - на следующую строку.

    for scanner.Scan() {
        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

Следующий пример: Пути к файлам (File Paths).