Reply to message «Re: delete only the short sentences», sent 17:21:40 01 November 2010, Monday by Tim Chase:
> On 11/01/10 07:40, Joan Miquel Torres Rigo wrote: > > 2010/11/1 Tim Chase<[email protected]>: > >> :v/\%40c./d > >> > >> ("if there's a character at position 40, don't delete this > >> row; otherwise, delete it") > > > > Then you will also remove rows with 61 to 80 characters. > > > > But the strategy is probably good. (I'm not fully expert with > > vim's regular expressions yet and I don't know the meaning of > > '%' in this context). > > Actually, the problem is the reverse -- it fails to delete lines > > > 80 characters. The \%40c is an atom that matches at column 40 > > > :help /\%c > > so any line that doesn't have a character at position 40 (lines > <40 chars) will be deleted. (note that I don't anchor the > column-position to the end-of-line) I'd usually[1] do this as a > > 2-pass, taking out those >80 in the 2nd pass: > :v/\%40c./d " delete anything shorter than 40 > :g/\%81c./d " delete anything longer than 80 > > I might have some fence-posting errors in there, so 40 might need > to be 39 or 41 and 81 might also be +/- 1, but the logic still holds. > > -tim > > > [1] > Yes, I've had to do the same thing as the OP on several occasions > with various shorter/longer-than thresholds; usually in > column-delimited files with garbage before/after the actual data. s/character/byte/ \%c does nothing with characters, it operates on byte columns. You should use \%v for displayed columns (unless you have a tab or non-printable character somewhere before Nth character, \%Nv will match at Nth character).
signature.asc
Description: This is a digitally signed message part.
