parent
e31acb3e45
commit
57ab68cc37
@ -0,0 +1,11 @@ |
||||
module go-linux-tools/go-grep |
||||
|
||||
go 1.20 |
||||
|
||||
require github.com/fatih/color v1.15.0 |
||||
|
||||
require ( |
||||
github.com/mattn/go-colorable v0.1.13 // indirect |
||||
github.com/mattn/go-isatty v0.0.17 // indirect |
||||
golang.org/x/sys v0.6.0 // indirect |
||||
) |
@ -0,0 +1,10 @@ |
||||
github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= |
||||
github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= |
||||
github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= |
||||
github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= |
||||
github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= |
||||
github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= |
||||
github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= |
||||
golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= |
||||
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= |
||||
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= |
@ -0,0 +1,59 @@ |
||||
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 = "" |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,9 @@ |
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin laoreet non mi ac vestibulum. Quisque at ultricies lorem. Integer porta consequat elit, ac viverra enim volutpat et. Duis auctor ultrices lectus. Mauris pretium quis dolor non feugiat. Nam at nibh in ante volutpat finibus eget nec erat. Donec fringilla tristique pulvinar. Cras euismod vitae mi vel pulvinar. Vivamus et nulla mattis, vulputate neque non, interdum tortor. Curabitur luctus felis id nulla imperdiet, at fermentum mauris sagittis. Duis luctus elementum auctor. Etiam tristique venenatis dignissim. Phasellus ut neque ut nisl eleifend sollicitudin. In hac habitasse platea dictumst. |
||||
|
||||
Etiam rhoncus quam sit amet risus tristique, ut efficitur tellus condimentum. Nullam quis turpis neque. Sed at nisi sit amet ante finibus porta. Nam laoreet mi sit amet lectus egestas, nec tempus orci placerat. Vestibulum fringilla congue tempus. Maecenas eget sem mi. Morbi nec elit volutpat, ultrices felis sit amet, mollis mi. Aenean mauris arcu, tincidunt sit amet diam ut, mollis pulvinar sem. Nunc at dolor a metus pellentesque mollis ac sed ipsum. Etiam et feugiat nibh. |
||||
|
||||
Fusce non velit ut nisi mollis scelerisque. Maecenas sagittis neque vitae egestas euismod. Maecenas at elementum nunc. Vivamus sodales luctus rhoncus. Donec eget vulputate mauris. Etiam venenatis diam ut fermentum vestibulum. Maecenas a felis ex. Maecenas tristique tortor vel fermentum imperdiet. Proin vel eros finibus enim gravida viverra in nec nunc. Donec lacinia lorem et fermentum sagittis. Pellentesque a purus eget sapien pulvinar cursus tempor id ex. Donec viverra interdum tellus, at feugiat est rutrum sit amet. Mauris bibendum semper turpis in egestas. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. |
||||
|
||||
In molestie luctus diam in ultrices. Donec ac malesuada tellus. Curabitur congue, ex convallis imperdiet fermentum, lacus turpis pharetra nibh, nec gravida est odio eu justo. Aenean ipsum arcu, pretium non ullamcorper a, congue venenatis orci. Praesent pulvinar enim sit amet nulla imperdiet, at pellentesque libero auctor. Vestibulum imperdiet enim ac feugiat lacinia. Mauris posuere congue placerat. In lobortis erat nec diam molestie, sed posuere orci auctor. Sed iaculis feugiat mi. Duis mollis quis metus et ultricies. |
||||
|
||||
Morbi eu est vehicula, porta lorem vitae, lacinia turpis. Curabitur venenatis, erat ac tristique tempor, nulla odio varius nisl, id ornare orci ipsum quis felis. Integer lacinia metus eu enim venenatis dapibus. Vivamus imperdiet, nunc ac suscipit sagittis, augue lectus tincidunt dolor, non pulvinar diam magna ut lorem. Phasellus vitae aliquam mi, et bibendum purus. Nunc tempus magna nec euismod fermentum. Donec sodales congue vestibulum. Nam accumsan maximus libero eu tempor. Nulla id tellus mi. |
Loading…
Reference in new issue