On Saturday, May 27, 2017 5:27:46 PM EDT bruce wrote:
> Hi.
> 
> I've got a file.. with a bunch of lines looking like:
> 
>   $bookVariable['asu']['Fall-2016']='link';
>   $bookVariable['lehmancuny']['Fall-2016']='1';
>   $bookVariable['uvu']['Fall-2016']='1';
>   $bookVariable['wmich']['Summer II 2017']='1';
>   $bookVariable['wmich']['Summer I 2017']='1';
>   $bookVariable['dmacc']['Summer-2017']='1';
>   $bookVariable['sdmesa']['Summer-2017']='link';
> 
> I''m looking to get the "text" inside the 1st group of brackets []
> 
> The following sed only gets the 1st 3 lines.. and it doesn't
> completely work.
> 
> sed -n "s/^.*bookVariable\['\(\S*\)'].*$/\1/p"  foo.txt

That's because the * quantifier is "greedy" and will match as much as
it can before forcing a match on "'"[1].

The \(\S*\) isn't what you want.  What you probably meant was
\([^']*\) instead.  That will match only the part up to the *first*
closing single quote character.


____________________
[1] The matching will go all the way to the end of the line and then
fail because there's no single quote there.  The matching engine will
start backtracking to the first point that it can get a match of "']".
That will encompass what you are seeing instead of only the first
thingy in the square brackets.  Greedy matching.

-- 
Garry T. Williams
_______________________________________________
users mailing list -- users@lists.fedoraproject.org
To unsubscribe send an email to users-le...@lists.fedoraproject.org

Reply via email to