FELIX-1706 - Highlight grep matches
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@822113 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/karaf/shell/commands/src/main/java/org/apache/felix/karaf/shell/commands/GrepAction.java b/karaf/shell/commands/src/main/java/org/apache/felix/karaf/shell/commands/GrepAction.java
index 3b0ed34..8241d00 100644
--- a/karaf/shell/commands/src/main/java/org/apache/felix/karaf/shell/commands/GrepAction.java
+++ b/karaf/shell/commands/src/main/java/org/apache/felix/karaf/shell/commands/GrepAction.java
@@ -21,12 +21,14 @@
import java.io.IOException;
import java.io.Reader;
import java.io.InputStreamReader;
+import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.felix.karaf.shell.console.OsgiCommandSupport;
import org.apache.felix.gogo.commands.Argument;
import org.apache.felix.gogo.commands.Option;
import org.apache.felix.gogo.commands.Command;
+import org.fusesource.jansi.Ansi;
@Command(scope = "shell", name="grep", description="Prints lines matching the given pattern")
@@ -69,16 +71,30 @@
regexp = regexp.toUpperCase();
}
Pattern p = Pattern.compile(regexp);
+ Pattern p2 = Pattern.compile(regex);
try {
int lineno = 1;
String line;
Reader r = new InputStreamReader(System.in);
while ((line = readLine(r)) != null) {
- if (p.matcher(ignoreCase ? line.toUpperCase() : line).matches() ^ invertMatch) {
+ String pattern = ignoreCase ? line.toUpperCase() : line;
+ if (p.matcher(pattern).matches() ^ invertMatch) {
+
if (lineNumber) {
System.out.print(String.format("%6d ", lineno++));
}
- System.out.println(line);
+
+ Matcher matcher2 = p2.matcher(pattern);
+ StringBuffer sb = new StringBuffer();
+ while (matcher2.find()) {
+ matcher2.appendReplacement(sb, Ansi.ansi()
+ .bg(Ansi.Color.YELLOW)
+ .fg(Ansi.Color.BLACK)
+ .a(matcher2.group())
+ .reset().toString());
+ }
+ matcher2.appendTail(sb);
+ System.out.println(sb.toString());
lineno++;
}
}