I was wondering if with grep and regex we can do something in the spirit of the following example:
Original text:
name_1_extratext
name_2_extratext
Target:
name_extratext_1
name_extratext_2
I am particularly interested in doing this within Vim. Thanks
@bohemian's comment about grep
only doing matching also applies within Vim. "grep" and "regex" are not, or should not, be vague buzzwords you throw at a problem. They are tools that may or may not be adapted to the class of problem you are having and a large part of learning is acquiring the correct intuition for what tool to use in what case.
In Vim, what you want to do is a substitution. It doesn't involve grep
at all but it definitely involves regular expressions.
In this specific case, you would do something like this:
:%s/\(.*\)\(_\d\+\)\(.*\)/\1\3\2
or this variant of @bohemian's answer:
:%s/_\([^_]\+\)_\(.*\)/_\2_\1/
or anything that works and makes sense to you, really. Ideally not something you copy/pasted from the internet but something you really understand.
Reference:
:s
command is introduced in chapter 10 of the user manual: :help 10.2
, and further documented under :help :s
.%
range is also introduced chapter 10 of the user manual: :help 10.3
, and further documented under :help :range
.:help pattern
.