2017-09-20 2 views
0

Ich habe die folgende Zeichenfolge in meinem Eingang jq:Rückverweise in jq wie sed oder vi?

"\n*blah\n**tim\nbob was here\n*item1\n**item2\n"

Und ich bin in der Lage, die erste \n* mit folgendem übereinstimmen:

[match("(\n\\*[A-Za-z0-9]*\n)";"g")]

die mir die gibt folgende Übereinstimmungen:

[ 
    { 
    "offset": 0, 
    "length": 7, 
    "string": "\n*blah\n", 
    "captures": [ 
     { 
     "offset": 0, 
     "length": 7, 
     "string": "\n*blah\n", 
     "name": null 
     } 
    ] 
    }, 
    { 
    "offset": 25, 
    "length": 8, 
    "string": "\n*item1\n", 
    "captures": [ 
     { 
     "offset": 25, 
     "length": 8, 
     "string": "\n*item1\n", 
     "name": null 
     } 
    ] 
    } 
] 

Mein Ziel ist es jedoch, nach diesen zu suchen und einen zusätzlichen \n zum Anfang der übereinstimmenden \n* Zeilen hinzuzufügen.

ich scheinbar nicht in der Lage Rückreferenzierungen mit gsub zu tun, so ist es eine ähnliche Funktionalität zu dem, was in jq in sed und vi mit Rückreferenzierung erfolgen Spiele können?

Antwort

2

Hier ist eine Demonstration eine benannte Capture ?<a> mit sub mit und gsub:

$ jq -Mn ' 
    "\n*blah\n**tim\nbob was here\n*item1\n**item2\n" 
| sub("(?<a>\n\\*[A-Za-z0-9]*\n)";"\n\(.a)";"g") 
    , gsub("(?<a>\n\\*[A-Za-z0-9]*\n)";"\n\(.a)") 
' 

Ausgang

"\n\n*blah\n**tim\nbob was here\n\n*item1\n**item2\n" 
"\n\n*blah\n**tim\nbob was here\n\n*item1\n**item2\n" 
+0

Also, was die offizielle Syntax ist das? Brauchst du das? 'da und es muss genau wie der Ausdruck zwischen den Klammern sein? – leeand00

+0

Das [Handbuch] (https://stedolan.github.io/jq/manual/#RegularexpressionsPCRE) ist ein bisschen knapp, und es hilft, den gesamten Abschnitt zu lesen. Die [Implementierung] (https://github.com/stedolan/jq/blob/master/src/builtin.jq#L115-L153) scheint davon abzuhängen, was [Übereinstimmung] (https://github.com/stedolan/) jq/blob/master/src/builtin.C# L753) speichert in '.captures', daher glaube ich nicht, dass Rückverweise unterstützt werden, was merkwürdig ist, da jq [oniguruma] (https://github.com/kkos/oniguruma/blob/master/doc/RE), um die Regex-Arbeit zu erledigen, und sie scheint sie zu unterstützen. Vielleicht sind sie nur im Suchmuster erlaubt. – jq170727