Line Filters

Строковые фильтры (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