Строковые фильтры (Line Filters)|Line Filters
#
// _Строковый фильтр_ - это типичный тип программы,
// которая читает входные данные в stdin, обрабатывает
// их и затем выводит некоторый производный результат в
// стандартный вывод. `grep` и `sed` - это обычные строковые
// фильтры.
// Вот пример строкового фильтра в Go, который записывает
// заглавную версию всего входного текста. Вы можете
// использовать этот шаблон для написания ваших собственных
// фильтров Go.
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
func main() {
// Обертывание небуферизованного `os.Stdin` буферизованным
// сканером дает нам удобный метод сканирования `Scan`,
// который продвигает сканер к следующему токену; который
// является следующей строкой в сканере по умолчанию.
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
// `Text` возвращает текущий токен, из ввода - на
// следующую строку.
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