I have a random file with a bunch of lines. Snippet:
lorium0{([y])} Contrary to popular belief, Lorem Ipsum is not simply random text cold
lorium0{([y])} Contrary to popular belief, Lorem Ipsum is not simply random text hot
It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout
There are many variations of passages of Lorem Ipsum available
lorium0{([y])} Contrary to popular belief, Lorem Ipsum is not simply random text tea
There are many variations of passages of Lorem Ipsum available
lorium0{([y])} Contrary to popular belief, Lorem Ipsum is not simply random text bee
etc
I want to match every line starting with lorium0{([y])} and then replace simply with very using the vi or vim editor (Preferably with vi). Would like to accomplish this with a 1 line command.
- Find Regex match to filter out unwanted lines
- Find word simply and replace with very
ie.:
lorium0{([y])} Contrary to popular belief, Lorem Ipsum is not simply random text bee
Becomes:
lorium0{([y])} Contrary to popular belief, Lorem Ipsum is not very random text bee
Trying:
:1,$ s\(lorium0[^ ].*\)\1\(simply\)\2\1: very\2g
But having difficulty formatting the command and understanding capture groups in substitution.
Thanks.
CodePudding user response:
You can use
:%s/^lorium0{(\[y])}.*\zs\<simply\>/very/g
Details:
^- start of string/linelorium0{(\[y])}- a literallorium0{([y])}text.*- any zero or more chars other than line break chars as many as possible\zs- the text before is just context, the match starts at this point\<simply\>- a whole wordsimply(\<and\>are word boundaries).
Or, you may use a group (in the regex) with a backreference (in the RHS):
%s/^\(lorium0{(\[y])}.*\)\<simply\>/\1very/g
^^ ^^ ^^
CodePudding user response:
Use :g with a pattern to restrict the lines on which the replacement is made. For example:
:g/^lorium0{(\[y\])}/s/simply/very
