-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsimple-grep.rn
44 lines (36 loc) · 1.11 KB
/
simple-grep.rn
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import argparser
fun main() {
var parser = argparser.Argparser()
parser.add_flag("--help", "-h", "Show this help text and exit")
parser.add_pos_opt("query", "String to query", required=true)
parser.add_pos_opt("file", "File to query string in", required=true)
parser.add_flag("--line-numbers", "-n", "Show line numbers")
parser.add_named("--max-lines", "Maximum amount of lines to show", conversor=int)
var args = parser.parse(argv[:])
if args["--help"] {
print(parser.usage(argv[0]))
exit()
}
var f = File(args["file"], "r")
var lines = (String(f.read())).split("\n")
f.close()
var matched_lines = []
var i = 0
for line in lines {
if args["query"] in line {
arr_append(matched_lines, [i, line])
}
i++
}
if not is_null(args["--max-lines"]) {
var matched_lines = matched_lines[:args["--max-lines"]]
}
for line in matched_lines {
var s = line[1]
if args["--line-numbers"] {
var s = args["file"] + ":" + line[0] + ": " + s
}
print(s)
}
}
main()