about summary refs log tree commit diff
path: root/arr
diff options
context:
space:
mode:
Diffstat (limited to 'arr')
-rwxr-xr-xarr13
1 files changed, 9 insertions, 4 deletions
diff --git a/arr b/arr
index 8d5ba5a..ae312d4 100755
--- a/arr
+++ b/arr
@@ -8,10 +8,11 @@
 
 USAGE = <<'EOF'
 Usage: arr [-0] [-P|-p PADDING] EXPR [FILES...]
-  EXPR   ::= FIELDS (("|" CHAR | "*") FIELDS)*  # | split on char, * split bytes
-  FIELDS ::= "~"? FIELD ("," FIELD)*            # ~ negates
-  FIELD  ::= "-"? "\d"+                         # negative fields count from back
-           | ("-"? "\d"+)? ":" ("-"? "\d"+)?    # range ends default to 1:-1
+  EXPR   ::= FIELDS (("|" CHAR | "*") FIELDS)* ("&" CHAR)?
+                     # | split on char, * split bytes, & join with char
+  FIELDS ::= "~"? FIELD ("," FIELD)*          # ~ negates
+  FIELD  ::= "-"? "\d"+                       # negative fields count from back
+           | ("-"? "\d"+)? ":" ("-"? "\d"+)?  # range ends default to 1:-1
 EOF
 
 require 'strscan'
@@ -70,6 +71,10 @@ def fmt(ss, d)
     end
   }
 
+  if ss.scan(/\&(.)/)
+    last_split = ss[1]
+  end
+
   unless ss.scan(/\}/)
     abort "parse error at #{ss.inspect}"
   end