Sunday, May 24, 2015

Re: [OT] Somehow "reversed" question

Tim Chase <vim@tim.thechases.com> [15-05-24 20:12]:
> On 2015-05-24 16:21, Meino.Cramer@gmx.de wrote:
> > When replacing character/words in a text with vim, I can
> > limit the search'n'replace-areaa with a visual selection
> > and giving a \%V in the search pattern.
> >
> > I need to build a shell script, which does exactliy
> > this: Replaceing character in a limited range of columns.
> >
> > Can I do this with sed somehow?
>
> While not perfect and there are some odd edge-cases, you can try
>
> sed ':a;s/^\(.\{29,39\}\)x/\1y/;ta' myfile.txt > output.txt
>
> where 30=the left hand column minus 1 (the minimum number of
> characters that can precede the match), 39=the right-hand column minus
> the number of characters in the search term (len("x")=1) (the
> maximum number of characters that can precede a valid match), and "y"
> is the replacement. So for a three-character search term in columns
> 20-30, you'd use
>
> sed ':a;s/^\(.\{19,27\}\)abc/\1xyz/;ta'
>
> There are edge-cases where the pattern is not a fixed-width, or the
> replacement isn't the same size as the pattern. Or where the
> replacement contains the search term ("s/x/xx/"). There might be
> others, but I encountered these when testing. In these degenerate
> cases, it may be attempting to perform an infinite number of
> replacements, so just ^C to kill it.
>
> It breaks down as
>
> :a a label to return to
> s/ substitute, searching for:
> ^ assert the start of the line
> \( capture the stuff preceding our search expression
> .\{19,27\} 19-27 of any character has to precede the match
> \) end of the capture group
> abc the search expression
> / replace that with
> \1 the stuff we captured
> xyz our replacement
> /
> ta If we successfully performed a replacement, go
> back to the "a" label and try to do it again.
> If we didn't, proceed to the next line and
> repeat the whole process again
>
> to do more than that, you might need something more powerful like
> Perl's look-behind/look-ahead assertions (I'm a Python guy, not a
> Perl guy, so I can only take an uneducated stab at that if you need
> it).
>
> -tim
>
> PS: there's a sed-users mailing list
> http://groups.yahoo.com/group/sed-users/
> in case you have more sed questions. Though sed posts on the vim
> mailing list are more "TT" (Tangentially Topical) than completely OT.
>
>
> ---
> You received this message because you are subscribed to the Google Groups "vim_use" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.
>

Hi Tim,

...WHOW!.... (an then there was silence)....;)

I am completly baffled...that such a simple task in vim "explodes"
when one wants to do such a thing with sed. Which is a good argument for
vim, indeed!

Thank you very much for the help and of course the explanations, what the help
means ;)))) 8)))
Best regards,
Meino





--
--
You received this message from the "vim_use" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

---
You received this message because you are subscribed to the Google Groups "vim_use" group.
To unsubscribe from this group and stop receiving emails from it, send an email to vim_use+unsubscribe@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

No comments: