2016-04-30 19 views
-1

Ich habe eine sedfile namens tester.txt, die diesen Code enthält.Sed Substitution Ausgabe mit regulären Ausdrücken

s/\(\\ref\s*\) \(\w*,\) \(``\(\w*\s*\)*,\) \(.*\)/\1 ll\2 ll\3 dd\4/ 
/^\ref{A-Za-z}*/p 

Wenn ich diese Befehle auf den folgenden Text ausführen, erhalte ich einige falsche Ausgabe. Ich verstehe nicht, warum der Teil "in Ordnung" wiederholt wird. Sollte das ". *" Nicht mit dem Rest des Textes übereinstimmen? Ich bin mir nicht sicher, warum es so weit ist. Jede Hilfe wäre willkommen.

Ausgabe:

\ref llthis, ll``is hard af alright, ddalright 

Originaltext:

\ref this, ``is hard af alright, finally, 
+0

Backrefs durch ihre Öffnung paren nummeriert sind. Verschachtelte Parens erhöhen die Anzahl beim Öffnen. Also (ref) (w) ('' (w)) (. *) Ist nummeriert (1: ref) (2: w) (3: '' (4: w)) (5:. *) –

Antwort

0

: Innerhalb von:

\(\\ref\s*\) \(\w*,\) \(``\(\w*\s*\)*,\) \(.*\) 

nur Ihre Capture-Gruppen zählen:

1: \(\\ref\s*\) 
2: \(\w*,\) 
3: \(``\(\w*\s*\)*,\) 
4: \(\w*\s*\) 
5: \(.*\) 

Die vierte (später als \4 bezeichnet) ist innerhalb der 3. (\3) daher die Wiederholung. Sie zeigen nicht, welche Ausgabe Sie tatsächlich bekommen zu erwarten, so dass es eine Vermutung ist, aber vielleicht wollte man:

\1 ll\2 ll\3 dd\5 

statt:

\1 ll\2 ll\3 dd\4 
+0

Vielen Dank für diese Erklärung. Dies ist eine sehr hilfreiche Information. Prost. –

Verwandte Themen