sed-regex - matching von text zwischen zwei Anführungszeichen, wenn ein Muster erscheint in der Zeile
Mittels batch-PHP von linux-shell-ich bin versucht zu ersetzen die Lizenz-Nummer in einer config-Datei unter einem anderen. Die config-line-in-Frage nicht immer die gleiche angezeigt, aber kann oder kann nicht mit Leerzeichen, tabs, etc..
Beispiele:
$config['license_number'] = "jfur2e2ev9uhuvcfu";
$config['license_number'] ="jfur2e2ev9uhuvcfu";
$config['license_number'] ="";
$config['license_number']= "jfur2e2ev9uhuvcfu";
$config[ 'license_number' ] = "jfur2e2ev9uhuvcfu";
Den Schlüssel zu finden, jede Zeile mit "license_number" (oder jeder andere text angegeben) und ersetzen, was zwischen die doppelten Anführungszeichen mit der neuen config-parameter.
Möchte ich sed benutzen, so dass ich sehen kann in allen Dateien rekursiv. Ich habe versucht, positive lookbehind, aber ich kann nicht definieren, eine für Textdateien mit fester Länge zu suchen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies setzt Voraus, dass es nur ein vorkommen pro Zeile:
In Perl, können Sie
\K
für variable Länge positiv lookbehinds.sed
spezifische Antwort 🙂sed
unterstützt, können Sie verwenden, oktal-oder hex entweicht. Entwedersed 's/\o47/foo/
(das ist der Buchstabe "o" vor dem "47") odersed/\x27/foo/
würde sich ändern, ein einzelnes Zitat zu "foo". Wenn Ihrsed
nicht der Fall, dann wäre dies äquivalent:sed 's/'\''/foo/'
*
) nicht-Zitat-Zeichen ([^"]
). Sie finden eine hervorragende regular expression-Referenz und tutorial, hier.Manchmal ist die Lösung kann gelöst werden, ohne zu viel regex. Versuchen awk
dieser sagt, wenn "license_number" gefunden wird, wechseln Sie zu 2. Feld "foo". Das input-field seperator und Ausgabe Feld-Trennzeichen auf "=".