@@ -103,7 +103,14 @@ func applyChangesetsToFile(fileitem fileitem, changesets []changeset) (string, b
103103 if opts .ModeIsLineInFile {
104104 for _ , changeset := range changesets {
105105 if ! changeset .MatchFound {
106- buffer .WriteString (changeset .Replace + "\n " )
106+ line = changeset .Replace + "\n "
107+
108+ // remove backrefs (no match)
109+ if opts .RegexBackref {
110+ line = regexp .MustCompile ("\\ $[0-9]+" ).ReplaceAllLiteralString (line , "" )
111+ }
112+
113+ buffer .WriteString (line )
107114 writeBufferToFile = true
108115 }
109116 }
@@ -165,8 +172,16 @@ func applyChangesetsToLine(line string, changesets []changeset) (string, bool, b
165172 if searchMatch (line , changeset ) {
166173 // --mode=line or --mode=lineinfile
167174 if opts .ModeIsReplaceLine || opts .ModeIsLineInFile {
168- // replace whole line with replace term
169- line = changeset .Replace
175+ if opts .RegexBackref {
176+ // get match
177+ line = string (changeset .Search .Find ([]byte (line )))
178+
179+ // replace regex backrefs in match
180+ line = changeset .Search .ReplaceAllString (line , changeset .Replace )
181+ } else {
182+ // replace whole line with replace term
183+ line = changeset .Replace
184+ }
170185 } else {
171186 // replace only term inside line
172187 line = replaceText (line , changeset )
0 commit comments