Mercurial > mercurial > hgweb_golang.cgi
comparison src/ut/lu/lu.go @ 18:45ca03520eea
ut: add grep.
author | pyon@macmini |
---|---|
date | Sat, 23 Jun 2018 09:38:15 +0900 |
parents | 72ce457fb99d |
children | 8008046c8d76 |
comparison
equal
deleted
inserted
replaced
17:72ce457fb99d | 18:45ca03520eea |
---|---|
14 "io" | 14 "io" |
15 "log" | 15 "log" |
16 "os" | 16 "os" |
17 "os/exec" | 17 "os/exec" |
18 "path/filepath" | 18 "path/filepath" |
19 "regexp" | |
19 "strings" | 20 "strings" |
20 ) | 21 ) |
21 | 22 |
22 func CmdTime( cmdline string ) { | 23 func CmdTime( cmdline string ) { |
23 cmd := exec.Command( "ls", "-l" ) | 24 cmd := exec.Command( "ls", "-l" ) |
206 for i := len( buf ); i > 0; i-- { | 207 for i := len( buf ); i > 0; i-- { |
207 fmt.Println( buf[i-1] ) | 208 fmt.Println( buf[i-1] ) |
208 } | 209 } |
209 } | 210 } |
210 | 211 |
212 /* grep: done. */ | |
211 func Grep( word string, inv bool, files []string ) { | 213 func Grep( word string, inv bool, files []string ) { |
212 if len( files ) == 0 { | 214 regex, err := regexp.Compile( word ) |
213 fmt.Println("grep stdin") | 215 if err != nil { |
214 } else { | 216 log.Fatal( err ) |
215 fmt.Println("grep") | 217 } |
218 if len( files ) == 0 { | |
219 grep( regex, inv, os.Stdin ) | |
220 } else { | |
221 for _, file := range files { | |
222 f, _ := os.Open( file ) | |
223 grep( regex, inv, f ) | |
224 f.Close() | |
225 } | |
226 } | |
227 } | |
228 | |
229 func grep( regex *regexp.Regexp, inv bool, r io.Reader ) { | |
230 input := bufio.NewScanner( r ) | |
231 for input.Scan() { | |
232 if regex.MatchString( input.Text() ) && !inv { | |
233 fmt.Println( input.Text() ) | |
234 } | |
235 if !regex.MatchString( input.Text() ) && inv { | |
236 fmt.Println( input.Text() ) | |
237 } | |
238 } | |
239 } | |
240 | |
241 /* orgrep: done. */ | |
242 func OrGrep( lfile string, inv bool, files []string ) { | |
243 var keywords []regexp.Regexp | |
244 f, _ := os.Open( lfile ) | |
245 input := bufio.NewScanner( f ) | |
246 for input.Scan() { | |
247 regex, err := regexp.Compile( input.Text() ) | |
248 if err != nil { | |
249 log.Fatal( err ) | |
250 } | |
251 keywords = append( keywords, *regex ) | |
252 } | |
253 f.Close() | |
254 | |
255 if len( files ) == 0 { | |
256 orgrep( keywords, inv, os.Stdin ) | |
257 } else { | |
258 for _, file := range files { | |
259 f, _ := os.Open( file ) | |
260 orgrep( keywords, inv, f ) | |
261 f.Close() | |
262 } | |
263 } | |
264 } | |
265 | |
266 func orgrep( keywords []regexp.Regexp, inv bool, r io.Reader ) { | |
267 input := bufio.NewScanner( r ) | |
268 seen := make( map[string]bool ) | |
269 for input.Scan() { | |
270 for _, r := range keywords { | |
271 if r.MatchString( input.Text() ) { | |
272 seen[ input.Text() ] = true | |
273 } | |
274 } | |
275 if !inv && seen[ input.Text() ] { | |
276 fmt.Println( input.Text() ) | |
277 } | |
278 if inv && !seen[ input.Text() ] { | |
279 fmt.Println( input.Text() ) | |
280 } | |
281 seen[ input.Text() ] = false | |
216 } | 282 } |
217 } | 283 } |
218 | 284 |
219 /* uniq: done. */ | 285 /* uniq: done. */ |
220 func Uniq( cnt, dup bool, files []string ) { | 286 func Uniq( cnt, dup bool, files []string ) { |