diff --git a/src/uu/csplit/src/split_name.rs b/src/uu/csplit/src/split_name.rs index 758216414..44ea2a5af 100644 --- a/src/uu/csplit/src/split_name.rs +++ b/src/uu/csplit/src/split_name.rs @@ -47,7 +47,7 @@ impl SplitName { }), Some(custom) => { let spec = - Regex::new(r"(?P%(?P[0#-])(?P\d+)?(?P[diuoxX]))") + Regex::new(r"(?P%((?P[0#-])(?P\d+)?)?(?P[diuoxX]))") .unwrap(); let mut captures_iter = spec.captures_iter(&custom); let custom_fn: Box String> = match captures_iter.next() { @@ -60,6 +60,21 @@ impl SplitName { Some(m) => m.as_str().parse::().unwrap(), }; match (captures.name("FLAG"), captures.name("TYPE")) { + (None, Some(ref t)) => match t.as_str() { + "d" | "i" | "u" => Box::new(move |n: usize| -> String { + format!("{}{}{}{}", prefix, before, n, after) + }), + "o" => Box::new(move |n: usize| -> String { + format!("{}{}{:o}{}", prefix, before, n, after) + }), + "x" => Box::new(move |n: usize| -> String { + format!("{}{}{:x}{}", prefix, before, n, after) + }), + "X" => Box::new(move |n: usize| -> String { + format!("{}{}{:X}{}", prefix, before, n, after) + }), + _ => return Err(CsplitError::SuffixFormatIncorrect), + }, (Some(ref f), Some(ref t)) => { match (f.as_str(), t.as_str()) { /* @@ -276,6 +291,12 @@ mod tests { assert_eq!(split_name.get(2), "xx00002"); } + #[test] + fn no_padding_decimal() { + let split_name = SplitName::new(None, Some(String::from("cst-%d-")), None).unwrap(); + assert_eq!(split_name.get(2), "xxcst-2-"); + } + #[test] fn zero_padding_decimal1() { let split_name = SplitName::new(None, Some(String::from("cst-%03d-")), None).unwrap();