Ich habe mit einem bestimmten Dateinamen zu tun, und müssen Informationen aus ihnen extrahieren.eine bestimmte Teilzeichenfolge mit regulären Ausdrücken mit awk
Die Struktur des Dateinamen ist ähnlich: „20100613_M4_28007834.005_F_RANDOMSTR.raw.gz“
mit RandomStr einer Kette von max 22 Zeichen, und der einen Teil (oder nicht) mit dem Format „enthalten - W [0-9]. [0-9] {2}. [0-9] {3} ". Dieser Teilstring hat auch die einzigartige Eigenschaft, mit "-W" zu beginnen.
Die Informationen, die ich extrahieren muss, ist die Teilzeichenfolge von RANDOMSTR ohne diese optionale Teilzeichenfolge.
Ich möchte dies in einem Bash-Skript implementieren, und bis jetzt die beste Option, die ich gefunden habe, ist Gawk mit einem regulären Ausdruck zu verwenden. Mein bester Versuch bisher versagt:
gawk --re-interval '{match ($0,"([0-9]{8})_(M[0-9])_([0-9]{8}\\.[0-9]{3})_(.)_(.*)(-W.*)?.raw.gz",arr); print arr[5]}' <<< "20100613_M4_28007834.005_F_OTHER-STRING-W0.40+045.raw.gz"
OTHER-STRING-W0.40+045
Die erwarteten Ergebnisse sind:
gawk --re-interval '{match ($0,$regexp,arr); print arr[5]}' <<< "20100613_M4_28007834.005_F_SOME-STRING.raw.gz"
SOME-STRING
gawk --re-interval '{match ($0,$regexp,arr); print arr[5]}' <<< "20100613_M4_28007834.005_F_OTHER-STRING-W0.40+045.raw.gz"
OTHER-STRING
Wie kann ich den gewünschten Effekt zu bekommen.
Danke.
Sie haben erwähnt, dass der Teil das Muster hat '" -W [0-9]. [0-9] {2}. [0-9] {3} "' Ihre Beispieleingabe enthält jedoch ... W0.40 + 045.raw.gz'. Müssen Sie beiden gerecht werden? –
Ich schließe die ".raw.gz" nicht als Teil der Teilzeichenfolge ein. – RogerFC
Entschuldigung, ich wollte auf das Pluszeichen aufmerksam machen, das von deinem Muster nicht abgedeckt würde. –