Source File: go-coreutils/grep/main.go
package main
import (
"fmt"
"regexp"
"os"
"bufio"
"flag"
"log"
"io"
)
func ScanInput(input io.Reader, exp string, prefix string) {
scan := bufio.NewScanner(input)
re, err := regexp.Compile(exp)
if err != nil { log.Fatal(err) }
for scan.Scan() {
line := scan.Text()
if re.MatchString(line) {
if prefix != "" {
fmt.Print(prefix, ": ")
}
fmt.Println(line)
}
}
}
func main() {
flag.Parse()
args := flag.Args()
if len(args) == 0 {
log.Fatal("USAGE: grep <regex> [files...]")
} else if len(args) == 1 {
ScanInput(os.Stdin, args[0], "")
} else {
exp := args[0]
files := args[1:]
for _, file := range files {
input, err := os.Open(file)
if err != nil { log.Fatal(err) }
ScanInput(input, exp, file)
}
}
}