Line filtrlar

Line filtr — stdin'dan kirishni o‘qib, uni qayta ishlash va natijani stdout'ga chiqaradigan dastur turi. `grep` va `sed` — keng tarqalgan line filtrlar. Quyida barcha kirish qatorlarini katta harflarga aylantirib chiqaradigan oddiy filtr.
package main

import (
    "bufio"
    "fmt"
    "os"
    "strings"
)

func main() {
    // Bufferlangan skaner bilan os.Stdin — qulay Scan metodi bilan keyingi token (standartda qatordan) o'tamiz
    scanner := bufio.NewScanner(os.Stdin)

    // Har bir qatorni o‘qib, katta harfga o‘tkazib chiqaramiz
    for scanner.Scan() {
        ucl := strings.ToUpper(scanner.Text())
        fmt.Println(ucl)
    }

    // Scan paytidagi xatolarni tekshirish (EOF xato emas)
    if err := scanner.Err(); err != nil {
        fmt.Fprintln(os.Stderr, "error:", err)
        os.Exit(1)
    }
}

Sinab ko‘rish:

$ echo 'hello'   > /tmp/lines
$ echo 'filter' >> /tmp/lines
$ cat /tmp/lines | go run line-filters.go
HELLO
FILTER