Hmm, it's not quite behaving the same as `RS='\n$'` as `RS='()'` doesn't
populate `RT` with the terminating `\n` though it does consume it:
$ printf 'foo\n' | awk -v RS='()' -v ORS='x\n' '{print "<"RT">"}1'
<>x
foox
$ printf 'foo\n' | awk -v RS='\n$' -v ORS='x\n' '{print "<"RT">"}1'
<
>x
foox
On 1/5/2021 12:38 PM, Ed Morton wrote:
Someone just pointed this out to me (gawk 5.1.0):
$ printf 'foo\n' | awk '{gsub(/()/,"x")} 1'
xfxoxox
$ printf 'foo\n' | awk -v RS='()' -v ORS='x\n' '1'
foox
Obviously that's a pretty ridiculous regexp but it still has me
wondering - why does `gsub()` treat the regexp `()` as matching a null
string around every character while `RS` treats it as if I'd asked it
to match the `\n` at the end of the input:
$ printf 'foo\n' | awk -v RS='\n$' -v ORS='x\n' '1'
foox
I could just file this under "don't write stupid regexps" but I was
wondering if there's a more concrete, satisfying explanation of the
behavior.
Ed.