9fans - fans of the OS Plan 9 from Bell Labs
 help / color / mirror / Atom feed
* [9fans] acme g/$/ funny
@ 2008-07-17 10:03 roger peppe
  2008-07-17 12:44 ` Charles Forsyth
  2008-07-17 13:07 ` Pietro Gagliardi
  0 siblings, 2 replies; 5+ messages in thread
From: roger peppe @ 2008-07-17 10:03 UTC (permalink / raw)
  To: Fans of the OS Plan 9 from Bell Labs

Edit ,x/.*/g/$/a/foo/

shouldn't this append "foo" after every line?

sam gives slightly different behaviour here
(but still questionable) - it appends "foo" after
every empty line.

is this actually a bug, or have i misunderstood the
way that '$' is meant to work?

it does seem strange that in the following edit
command, the guard never matches anything.

Edit ,x/foo$/g/foo$/d



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [9fans] acme g/$/ funny
  2008-07-17 10:03 [9fans] acme g/$/ funny roger peppe
@ 2008-07-17 12:44 ` Charles Forsyth
  2008-07-17 13:07 ` Pietro Gagliardi
  1 sibling, 0 replies; 5+ messages in thread
From: Charles Forsyth @ 2008-07-17 12:44 UTC (permalink / raw)
  To: 9fans

>Edit ,x/.*/g/$/a/foo/
>shouldn't this append "foo" after every line?

Edit ,x/.*\n/g/\n/a/foo

or

Edit ,x/.*\n/g/$/a/foo

where the latter gives a little hint about what the code might be doing




^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [9fans] acme g/$/ funny
  2008-07-17 10:03 [9fans] acme g/$/ funny roger peppe
  2008-07-17 12:44 ` Charles Forsyth
@ 2008-07-17 13:07 ` Pietro Gagliardi
  2008-07-17 14:01   ` roger peppe
  2008-07-17 14:43   ` Russ Cox
  1 sibling, 2 replies; 5+ messages in thread
From: Pietro Gagliardi @ 2008-07-17 13:07 UTC (permalink / raw)
  To: Fans of the OS Plan 9 from Bell Labs

On Jul 17, 2008, at 6:03 AM, roger peppe wrote:
> Edit ,x/.*/g/$/a/foo/
>
> shouldn't this append "foo" after every line?
>
> sam gives slightly different behaviour here
> (but still questionable) - it appends "foo" after
> every empty line.
>
> is this actually a bug, or have i misunderstood the
> way that '$' is meant to work?
>
> it does seem strange that in the following edit
> command, the guard never matches anything.
>
> Edit ,x/foo$/g/foo$/d
>

You misunderstood how Pike regexps work, and it's a bug in sam. The
pattern /./ matches everything EXCEPT a newline, which would be
matched with $. The guard, then, should never work, as the following
proves:

,x/.*/g/$/p

As expected, no output (for sam too). So acme is acting correctly. Why
sam does something, then, with a// is beyond me (a long undiscovered
bug, perhaps?).

The following worked for me for both sam and acme:

,x/$/a/foo/

On Jul 17, 2008, at 8:44 AM, Charles Forsyth wrote:
> Edit ,x/.*\n/g/\n/a/foo
That appends foo at the beginning of the next line. Try i/foo/.




^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [9fans] acme g/$/ funny
  2008-07-17 13:07 ` Pietro Gagliardi
@ 2008-07-17 14:01   ` roger peppe
  2008-07-17 14:43   ` Russ Cox
  1 sibling, 0 replies; 5+ messages in thread
From: roger peppe @ 2008-07-17 14:01 UTC (permalink / raw)
  To: Fans of the OS Plan 9 from Bell Labs

On Thu, Jul 17, 2008 at 2:07 PM, Pietro Gagliardi <pietro10@mac.com> wrote:
> ,x/$/a/foo/

i was actually trying to do something slightly different;
my original command was:

  ,x/^[ \t]*let.*/v/in$/a/ in/

and i worked around it by doing

  ,x/^[ \t]let.*\n/v/in\n/x/\n/i/ in/

which wasn't too bad. i just wondered
if the behaviour i saw was actually a bug,
as $ matches the null string at the end of a line,
and i was matching against the null string at the end
of a line. i think i understand why it doesn't work;
but should it work differently?



^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [9fans] acme g/$/ funny
  2008-07-17 13:07 ` Pietro Gagliardi
  2008-07-17 14:01   ` roger peppe
@ 2008-07-17 14:43   ` Russ Cox
  1 sibling, 0 replies; 5+ messages in thread
From: Russ Cox @ 2008-07-17 14:43 UTC (permalink / raw)
  To: 9fans

> On Jul 17, 2008, at 6:03 AM, roger peppe wrote:
>> Edit ,x/.*/g/$/a/foo/
>>
>> shouldn't this append "foo" after every line?
>>
>> sam gives slightly different behaviour here
>> (but still questionable) - it appends "foo" after
>> every empty line.
>>
>> is this actually a bug, or have i misunderstood the
>> way that '$' is meant to work?
>>
>> it does seem strange that in the following edit
>> command, the guard never matches anything.
>>
>> Edit ,x/foo$/g/foo$/d
>>

pietro:
> You misunderstood how Pike regexps work
> ...
> That appends foo at the beginning of the next line. Try i/foo/.

It always brings a smile to my face when you say
things like that to people who have forgotten more
about Plan 9 than you know.  Thank you.


rog:
> Edit ,x/.*/g/$/a/foo/
>
> shouldn't this append "foo" after every line?

I would have expected it to.


pietro:
> The  pattern /./ matches everything EXCEPT a newline,
> which would be matched with $.

This is only half right.  $ matches the empty string before a newline,
not the newline itself.  Don't believe me?  Search for $$.

The real issue here is that inside an x/.*/ loop, the text being
considered has no newline, so the position at the end is no longer
an "empty string before a newline."  (The newline is outside the
search window.)

One possible fix would be to redefine $ to match the end
of the text as well as before newlines.  I've sometimes wanted
that in x loops that don't iterate over whole lines.  That would
have the unfortunate effect that if you had a four-line file like:

	abc\n
	def\n
	ghi\n
	jkl\n

and you ran ,s/$/!/g you would then have the four-and-a-half line file:

	abc!\n
	def!\n
	ghi!\n
	jkl!\n
	!

so you'd have to then define that $ matches the end of the text
unless the last character is a newline.  This is the point where
I usually give up and decide the current semantics are not worth
fiddling with.

Russ



^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2008-07-17 14:43 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-07-17 10:03 [9fans] acme g/$/ funny roger peppe
2008-07-17 12:44 ` Charles Forsyth
2008-07-17 13:07 ` Pietro Gagliardi
2008-07-17 14:01   ` roger peppe
2008-07-17 14:43   ` Russ Cox

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).