package main import ( "bufio" "fmt" "io" "log" "os" "regexp" ) const USAGE = `Usage: greppish [filename] Prints lines matching in [filename] or standard input.` func main() { if len(os.Args) < 2 { fmt.Println(USAGE) os.Exit(1) } regMatch, err := regexp.Compile(os.Args[1]) if err != nil { log.Fatal("Problem compiling regex: ", err) } inbuf := bufio.NewReader(os.Stdin) if len(os.Args) > 2 { infile, err := os.Open(os.Args[2]) if err != nil { log.Fatal("Problem opening input file: ", err) } inbuf = bufio.NewReader(infile) } var line string for { line, err = inbuf.ReadString('\n') if err != nil { if err == io.EOF { os.Exit(0) } log.Fatal("Problem reading input: ", err) } if regMatch.MatchString(line) { fmt.Printf(line) } } }