FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
cpython/Tools/scripts/rgrep.py at tkinter_docs · native-api/cpython · GitHub
native-api
cpython
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
cpython
/
Tools
/
scripts
/
rgrep.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
executable file
·
66 lines (57 loc) · 1.44 KB
Breadcrumbs
cpython
/
Tools
/
scripts
/
rgrep.py
Copy path
File metadata and controls
executable file
·
66 lines (57 loc) · 1.44 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#! /usr/bin/env python3
"""Reverse grep.
Usage: rgrep [-i] pattern file
"""
import
sys
import
re
import
getopt
def
main
():
bufsize
=
64
*
1024
reflags
=
0
opts
,
args
=
getopt
.
getopt
(
sys
.
argv
[
1
:],
"i"
)
for
o
,
a
in
opts
:
if
o
==
'-i'
:
reflags
=
reflags
|
re
.
IGNORECASE
if
len
(
args
)
<
2
:
usage
(
"not enough arguments"
)
if
len
(
args
)
>
2
:
usage
(
"exactly one file argument required"
)
pattern
,
filename
=
args
try
:
prog
=
re
.
compile
(
pattern
,
reflags
)
except
re
.
error
as
msg
:
usage
(
"error in regular expression: %s"
%
msg
)
try
:
f
=
open
(
filename
)
except
IOError
as
msg
:
usage
(
"can't open %r: %s"
%
(
filename
,
msg
),
1
)
f
.
seek
(
0
,
2
)
pos
=
f
.
tell
()
leftover
=
None
while
pos
>
0
:
size
=
min
(
pos
,
bufsize
)
pos
=
pos
-
size
f
.
seek
(
pos
)
buffer
=
f
.
read
(
size
)
lines
=
buffer
.
split
(
"
\n
"
)
del
buffer
if
leftover
is
None
:
if
not
lines
[
-
1
]:
del
lines
[
-
1
]
else
:
lines
[
-
1
]
=
lines
[
-
1
]
+
leftover
if
pos
>
0
:
leftover
=
lines
[
0
]
del
lines
[
0
]
else
:
leftover
=
None
for
line
in
reversed
(
lines
):
if
prog
.
search
(
line
):
print
(
line
)
def
usage
(
msg
,
code
=
2
):
sys
.
stdout
=
sys
.
stderr
print
(
msg
)
print
(
__doc__
)
sys
.
exit
(
code
)
if
__name__
==
'__main__'
:
main
()
Back
|
FazBrowse Home
|
New Git URL