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