Show More
@@ -1052,25 +1052,40 b' class SList(list):' | |||
|
1052 | 1052 | |
|
1053 | 1053 | p = paths = property(get_paths) |
|
1054 | 1054 | |
|
1055 | def grep(self, pattern, prune = False): | |
|
1055 | def grep(self, pattern, prune = False, field = None): | |
|
1056 | 1056 | """ Return all strings matching 'pattern' (a regex or callable) |
|
1057 | 1057 | |
|
1058 | 1058 | This is case-insensitive. If prune is true, return all items |
|
1059 | 1059 | NOT matching the pattern. |
|
1060 | 1060 | |
|
1061 | If field is specified, the match must occur in the specified | |
|
1062 | whitespace-separated field. | |
|
1063 | ||
|
1061 | 1064 | Examples:: |
|
1062 | 1065 | |
|
1063 | 1066 | a.grep( lambda x: x.startswith('C') ) |
|
1064 | 1067 | a.grep('Cha.*log', prune=1) |
|
1068 | a.grep('chm', field=-1) | |
|
1065 | 1069 | """ |
|
1070 | ||
|
1071 | def match_target(s): | |
|
1072 | if field is None: | |
|
1073 | return s | |
|
1074 | parts = s.split() | |
|
1075 | try: | |
|
1076 | tgt = parts[field] | |
|
1077 | return tgt | |
|
1078 | except IndexError: | |
|
1079 | return "" | |
|
1080 | ||
|
1066 | 1081 | if isinstance(pattern, basestring): |
|
1067 | 1082 | pred = lambda x : re.search(pattern, x, re.IGNORECASE) |
|
1068 | 1083 | else: |
|
1069 | 1084 | pred = pattern |
|
1070 | 1085 | if not prune: |
|
1071 | return SList([el for el in self if pred(el)]) | |
|
1086 | return SList([el for el in self if pred(match_target(el))]) | |
|
1072 | 1087 | else: |
|
1073 | return SList([el for el in self if not pred(el)]) | |
|
1088 | return SList([el for el in self if not pred(match_target(el))]) | |
|
1074 | 1089 | def fields(self, *fields): |
|
1075 | 1090 | """ Collect whitespace-separated fields from string list |
|
1076 | 1091 | |
@@ -1083,6 +1098,7 b' class SList(list):' | |||
|
1083 | 1098 | a.fields(0) is ['-rwxrwxrwx', 'drwxrwxrwx+'] |
|
1084 | 1099 | a.fields(1,0) is ['1 -rwxrwxrwx', '6 drwxrwxrwx+'] |
|
1085 | 1100 | (note the joining by space). |
|
1101 | a.fields(-1) is ['ChangeLog', 'IPython'] | |
|
1086 | 1102 | |
|
1087 | 1103 | IndexErrors are ignored. |
|
1088 | 1104 |
General Comments 0
You need to be logged in to leave comments.
Login now