Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problem with string interpolation #23

Closed
robdmc opened this issue Oct 22, 2012 · 3 comments
Closed

Problem with string interpolation #23

robdmc opened this issue Oct 22, 2012 · 3 comments
Labels

Comments

@robdmc
Copy link

robdmc commented Oct 22, 2012

I'm either using it incorrectly, or string interpolation appears to be broken. See below.

<tmp]$ echo {"foo":42} | jq '@(the input was %(.))'
error: Invalid character
@(the input was %(.))
^
error: syntax error, unexpected IDENT
@(the input was %(.))
^^^^^
error: Invalid character
@(the input was %(.))
^
3 compile errors

@stedolan
Copy link
Contributor

Ah! It is broken! I changed it to a less ugly syntax a couple of days ago and forgot to update the docs. Here's what it looks like now:

"the input was \(.)"

@robdmc
Copy link
Author

robdmc commented Oct 22, 2012

Cool. That seems to work, thanks. I really like this tool, by the way.

On Mon, Oct 22, 2012 at 11:39 AM, Stephen Dolan [email protected]:

Ah! It is broken! I changed it to a less ugly syntax a couple of days ago
and forgot to update the docs. Here's what it looks like now:

"the input was (.)"


Reply to this email directly or view it on GitHubhttps://github.com//issues/23#issuecomment-9675318.

@stedolan
Copy link
Contributor

Thanks! The docs are now a little closer to reality.

@dtolnay dtolnay added the docs label Jul 27, 2015
pkoppstein added a commit to pkoppstein/jq that referenced this issue Jun 29, 2023
… uniq(stream)

The primary purpose of this commit (which supercedes PR
jqlang#2624) is to rectify most problems
with `gsub` (and also `sub` with the "g" option), in particular jqlang#1425
('\b'), jqlang#2354 (lookahead), and jqlang#2532 (regex == "^(?!cd ).*$|^cd ";"")).

This commit also partly resolves jqlang#2148 and jqlang#1206 in that `gsub` no
longer loops infinitely; however, because the new `gsub` depends
critically on match(_;"g"), the behavior when regex == "" is sometimes
non-standard. [*1]

Since the new sub/3 relies on uniq/1, that has been added as well [*2].

The documentation has been updated to reflect the fact that `sub` and
`gsub` are intended to be regular in the second argument. [*3]

Also, _nwise/1 has been tweaked to take advantage of TCO.

Footnotes:

[*1] Using the new gsub, '"a" | gsub( ""; "a")' emits "aa" rather than
"aaa" as would be standard.  This is nevertheless better than the
infinite loop behavior of jq 1.6 in this case.

With one exception (as explained in [*2]), the new gsub is implemented
as though match/2 behavior is correct.  That is, bugs in `gsub`
behavior will most likely have their origin in `match/2`.

[*2] `uniq/1` adopts the Unix/Linux name and semantics; it is needed for the following test case:

gsub("(?=u)"; "u")
"qux"
"quux"

Without this functionality:

Test jqlang#23: 'gsub("(?=u)"; "u")' at line number 100
*** Expected "quux", but got "quuux" for test at line number 102: gsub("(?=u)"; "u")

The root of the problem here is `match`: if `match` is fixed, then gsub would not need `untie`.

The addition of `uniq` as a top-level function should be a non-issue
relative to general concern about builtins.jq bloat: the line count of
the new builtin.jq is significantly reduced overall, and the number of
defs is actually reduced by 1 (from 111 (ignoring a redundant def) to 110).

[*3] See e.g. jqlang#513 (comment)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants