diff --git a/bilby/core/utils.py b/bilby/core/utils.py
index d14c642e928044524ad7105a2774dc092939c0e4..a406c5c6818cb7edaf7f4d3a445a619c732b61be 100644
--- a/bilby/core/utils.py
+++ b/bilby/core/utils.py
@@ -1006,3 +1006,10 @@ def decode_astropy_quantity(dct):
 
 class IllegalDurationAndSamplingFrequencyException(Exception):
     pass
+
+
+class tcolors:
+    KEY = '\033[93m'
+    VALUE = '\033[91m'
+    HIGHLIGHT = '\033[95m'
+    END = '\033[0m'
diff --git a/cli_bilby/bilby_result.py b/cli_bilby/bilby_result.py
index ae3a6545b05fcc29aa52d93130a839f76d950053..237a9622e19389a8203f6ec4548324abc3879c51 100644
--- a/cli_bilby/bilby_result.py
+++ b/cli_bilby/bilby_result.py
@@ -25,13 +25,18 @@ import argparse
 import pandas as pd
 
 import bilby
+from bilby.core.utils import tcolors
 
 
 def setup_command_line_args():
     parser = argparse.ArgumentParser(
         description="Helper tool for bilby result files")
-    parser.add_argument("-r", "--results", nargs='+', required=True,
-                        help="List of results files.")
+    parser.add_argument(
+        "results", nargs='?',
+        help="List of results files.")
+    parser.add_argument(
+        "-r", "--results", nargs='+', dest="option_results", default=list(),
+        help="List of results files (alternative to passing results as a positional argument).")
     parser.add_argument("-c", "--convert", type=str, choices=['json', 'hdf5'],
                         help="Convert all results.", default=False)
     parser.add_argument("-m", "--merge", action='store_true',
@@ -49,7 +54,16 @@ def setup_command_line_args():
     parser.add_argument("--ipython", action='store_true',
                         help=("For each result given, drops the user into an "
                               "IPython shell with the result loaded in"))
-    args, _ = parser.parse_known_args()
+    args = parser.parse_args()
+
+    if args.results is None:
+        args.results = []
+    if isinstance(args.results, str):
+        args.results = [args.results]
+    args.results += args.option_results
+
+    if len(args.results) == 0:
+        raise ValueError("You have not passed any results to bilby_result")
 
     return args
 
@@ -81,6 +95,18 @@ def drop_to_ipython(results_list):
         IPython.embed(header=message)
 
 
+def print_matches(results_list, args):
+    for r in results_list:
+        print("\nResult file: {}/{}".format(r.outdir, r.label))
+        for key in args.print:
+            for attr in r.__dict__:
+                if key in attr:
+                    print_line = [
+                        "  ", tcolors.KEY, attr, ":", tcolors.VALUE,
+                        str(getattr(r, attr)), tcolors.END]
+                    print(" ".join(print_line))
+
+
 def main():
     args = setup_command_line_args()
     results_list = read_in_results(args.results)
@@ -88,10 +114,7 @@ def main():
         for r in results_list:
             r.save_to_file(extension=args.convert, outdir=args.outdir)
     if args.print is not None:
-        for r in results_list:
-            print("\nResult file: {}/{}".format(r.outdir, r.label))
-            for key in args.print:
-                print("  {}: {}".format(key, getattr(r, key, 'None')))
+        print_matches(results_list, args)
     if args.call is not None:
         for r in results_list:
             for call in args.call: