All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dave Chinner <david@fromorbit.com>
To: Jan Tulak <jtulak@redhat.com>
Cc: linux-xfs <linux-xfs@vger.kernel.org>
Subject: Re: [PATCH 0/2] xfsdump whitespace changes
Date: Tue, 6 Nov 2018 08:52:53 +1100	[thread overview]
Message-ID: <20181105215253.GK19305@dastard> (raw)
In-Reply-To: <CACj3i73WO-GFdgKhyk6GBcQ2Ebfs+hiojY+O1+JfYyBTPAvjXQ@mail.gmail.com>

On Mon, Nov 05, 2018 at 01:25:45PM +0100, Jan Tulak wrote:
> On Mon, Nov 5, 2018 at 12:48 PM Dave Chinner <david@fromorbit.com> wrote:
> >
> > On Mon, Nov 05, 2018 at 11:15:34AM +0100, Jan Tulak wrote:
> > > On Fri, Nov 2, 2018 at 11:34 PM Dave Chinner <david@fromorbit.com> wrote:
> > > >
> > > > On Fri, Nov 02, 2018 at 12:43:18PM +0100, Jan Tulak wrote:
> > > > > On Fri, Nov 2, 2018 at 2:36 AM Dave Chinner <david@fromorbit.com> wrote:
> > > > > > On Thu, Nov 01, 2018 at 12:01:28PM +0100, Jan Tulak wrote:
> > > > > > However, it's is the same change as what you originally posted to a
> > > > >
> > > > > Yes, it is the same thing, with changes where I found something
> > > > > misaligned on top.
> > > > >
> > > > > > git tree, then it needs revision. basically, most of the change was
> > > > > > converting vertically aligned function call parameters to use tabs,
> > > > > > and that broke the vertical alignment.
> > > > >
> > > > > It is "s/    /\t/" limited to the beginning of the line.
> > > >
> > > > You mean 's/^    /\t/'?
> > >
> > > Yes, but in multiple iterations to get \t, \t\t, \t\t\t, ...
> >
> > Which is handled by this regex: 's/^\(\t*\)*    /\1\t/'
> >
> > In this case, I'm using "*", which means "match zero or more of the
> > preceding expression" - which in this case is \t. That regex is
> > enclosed in \(...\) to group the result, which is then back
> > referenced in the output expression by \1 (first group backref).
> >
> > Regexes are extremely and flexible once you've learnt how the
> > multiple object matching rules work.
> 
> I know. But I don't see how your regex would take the number of
> four-space groups and inserted the same number of \t,

I thought you were asking about having multiple tabs preceding
the "4 space group". If you simply want to change all 4 space
groups, it's 's/\(    \)/\t/g':

$ echo "                " |sed -e 's/\(    \)/T/g'
TTTT
$

The positional match selector suffix is the key here. 'g' means
"global match" and replaces every occurrence on the line. If you use
a number, it replaces the N'th occurrence:

$ echo "                " |sed -e 's/\(    \)/T/1'
T            
$ echo "                " |sed -e 's/\(    \)/T/2'
    T        
$ echo "                " |sed -e 's/\(    \)/T/3'
        T    
$ echo "                " |sed -e 's/\(    \)/T/4'
            T
> which is what I
> was trying to do and AFAIK there is no way to do it with sed. I know
> it could be done with awk,

awk is still regex based, it just allows you to get away with simple
regexes by adding complex code :P

> but writing it would take more time for me
> than re-running s/^        /\t\t/ with a manually changed number of
> occurrences, from one to say 5 levels (or until I stop getting any
> changes).

Grouping and positional selection is the answer here.

Cheers,

Dave.
-- 
Dave Chinner
david@fromorbit.com

  reply	other threads:[~2018-11-06  7:14 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-01 11:01 [PATCH 0/2] xfsdump whitespace changes Jan Tulak
2018-11-01 11:01 ` [PATCH 1/2] xfsdump: remove trailing whitespaces Jan Tulak
2018-11-01 16:46   ` Eric Sandeen
2018-11-02  1:36 ` [PATCH 0/2] xfsdump whitespace changes Dave Chinner
2018-11-02 11:43   ` Jan Tulak
2018-11-02 16:54     ` Jan Tulak
2018-11-02 22:57       ` Dave Chinner
2018-11-05 10:17         ` Jan Tulak
2018-11-02 22:34     ` Dave Chinner
2018-11-05 10:15       ` Jan Tulak
2018-11-05 11:48         ` Dave Chinner
2018-11-05 12:25           ` Jan Tulak
2018-11-05 21:52             ` Dave Chinner [this message]
2018-11-08 17:39               ` Jan Tulak
2018-11-09  1:04                 ` Dave Chinner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181105215253.GK19305@dastard \
    --to=david@fromorbit.com \
    --cc=jtulak@redhat.com \
    --cc=linux-xfs@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.