diff --git a/src/app.rs b/src/app.rs index 9f5a18b6..c92e6814 100644 --- a/src/app.rs +++ b/src/app.rs @@ -162,7 +162,7 @@ pub fn app() -> App<'static, 'static> { .arg(flag("no-ignore-parent")) .arg(flag("no-ignore-vcs")) .arg(flag("null").short("0")) - .arg(flag("only-matching").short("o").conflicts_with("replace")) + .arg(flag("only-matching").short("o")) .arg(flag("path-separator").value_name("SEPARATOR").takes_value(true)) .arg(flag("pretty").short("p")) .arg(flag("replace").short("r") diff --git a/src/printer.rs b/src/printer.rs index 1a6f7dac..ebc5b2d4 100644 --- a/src/printer.rs +++ b/src/printer.rs @@ -316,7 +316,12 @@ impl Printer { let line = { let replacer = CountingReplacer::new( self.replace.as_ref().unwrap(), &mut count, &mut offsets); - re.replace_all(&buf[start..end], replacer) + if self.only_matching { + re.replace_all( + &buf[start + match_start..start + match_end], replacer) + } else { + re.replace_all(&buf[start..end], replacer) + } }; if self.max_columns.map_or(false, |m| line.len() > m) { let msg = format!( diff --git a/tests/tests.rs b/tests/tests.rs index 4de13216..0c9446c1 100644 --- a/tests/tests.rs +++ b/tests/tests.rs @@ -266,6 +266,20 @@ but Watson, Doctor has to have it taken out for him and dusted, assert_eq!(lines, expected); }); +sherlock!(replace_with_only_matching, "of (\\w+)", +|wd: WorkDir, mut cmd: Command| { + cmd.arg("-o").arg("-r").arg("$1"); + let lines: String = wd.stdout(&mut cmd); + let expected = "\ +this +detective +luck +straw +cigar +"; + assert_eq!(lines, expected); +}); + sherlock!(file_types, "Sherlock", ".", |wd: WorkDir, mut cmd: Command| { wd.create("file.py", "Sherlock"); wd.create("file.rs", "Sherlock");