parent
1d87e892a3
commit
6325d7fef6
@ -0,0 +1,2 @@ |
|||||||
|
grep |
||||||
|
grep.exe |
||||||
@ -0,0 +1,4 @@ |
|||||||
|
|
||||||
|
|
||||||
|
build: |
||||||
|
go build .
|
||||||
@ -0,0 +1,3 @@ |
|||||||
|
module lcthw.dev/go/go-coreutils/grep |
||||||
|
|
||||||
|
go 1.25.3 |
||||||
@ -0,0 +1,52 @@ |
|||||||
|
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) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
Loading…
Reference in new issue