package main import ( "flag" "fmt" "io/ioutil" "os" "github.com/fatih/color" ) func check(err error) { if err != nil { fmt.Fprintf(os.Stderr, "%s\n", err) os.Exit(1) } } func usage() { fmt.Printf("Usage:\n\t %s [text] [file]", os.Args[0]) } func main() { var flagNoColor = flag.Bool("no-colour", false, "Disable color output") flag.Parse() if *flagNoColor { color.NoColor = true } //set up colourful output found := color.New(color.FgRed).PrintfFunc() //check no args passed (min. two args need to be passed) and no more than 3 if len(os.Args) <= 2 || len(os.Args) > 3 { usage() //print usage and then exit os.Exit(1) } search := os.Args[1] filename := os.Args[2] fmt.Printf("search: %s\nfilename: %s\n\n", search, filename) bytes, err := ioutil.ReadFile(filename) check(err) word := "" //split []bytes into words by spaces for i := 0; i < len(bytes); i++ { word += string(bytes[i]) if string(bytes[i]) == " " { fmt.Print(word) word = "" } if word == search { found("%s", word) word = "" } } }