2017-12-20 10 views
0

Ich möchte Text zwischen zwei Mustern extrahieren. Der Befehl, den ich verwende, funktioniert nicht unter AIX, funktioniert aber unter Linux.Text zwischen Mustern extrahieren - Unix - AIX

Erstens, ich suche nach den Vorkommnissen eines Musters in einer Datei, und ich habe diese

sed -n "/STEP 005450/p" step_100 
STEP 005450 ***ACTIVATED*** Thu Oct 5 17:31:05 CEST 2017 
STEP 005450 REF R-A493 STEP 000010 (command -s <CONTAINER>) 
STEP 005450 ***FAILURE*** Thu Oct 5 17:31:05 CEST 2017 Return code : 2 
STEP 005450 ***ACTIVATED*** Thu Oct 5 17:33:54 CEST 2017 
STEP 005450 REF R-A493 STEP 000010 (command -s CONT1) 
STEP 005450 ***SUCCESFUL*** Thu Oct 5 17:33:55 CEST 2017 

Zweitens habe ich den Teil des Textes zwischen STEP 005450 ***ACTIVATED*** und STEP 005450 ***FAILURE***, aber der Befehl unter doesn‘extrahieren möchten t arbeiten und tut nichts.

sed -n "/STEP 005450/p" step_100 | sed -n "/STEP 005450/,/FAILURE/p" 
STEP 005450 ***ACTIVATED*** Thu Oct 5 17:31:05 CEST 2017 
STEP 005450 REF R-A493 STEP 000010 (command -s <CONTAINER>) 
STEP 005450 ***FAILURE*** Thu Oct 5 17:31:05 CEST 2017 Return code : 2 
STEP 005450 ***ACTIVATED*** Thu Oct 5 17:33:54 CEST 2017 
STEP 005450 REF R-A493 STEP 000010 (command -s CONT1) 
STEP 005450 ***SUCCESFUL*** Thu Oct 5 17:33:55 CEST 2017 

Normalerweise sollte ich dieses

STEP 005450 ***ACTIVATED*** Thu Oct 5 17:31:05 CEST 2017 
STEP 005450 REF R-A493 STEP 000010 (command -s <CONTAINER>) 
STEP 005450 ***FAILURE*** Thu Oct 5 17:31:05 CEST 2017 Return code : 2 

Dank für Reise Hilfe

+0

GNU sed Ihre gewünschte Ausgabe nicht geben, wie Sie angeben. Wahrscheinlich haben Sie eine Kopie einfügen Fehler in – Thor

+0

Ich habe den Befehl manuell getextet – AaronLbk

+0

Ihre Frage ist unklar, wie es aussieht. Bitte halten Sie sich an das [MCVE-Prinzip] (https://stackoverflow.com/help/mcve) – Thor

Antwort

1

Vielleicht funktioniert mit AIX sed auch:

| sed -n "/ACTIVATED/,/FAILURE/{ /ACTIVATED/{h;b}; H; /FAILURE/{g;p}; }" 

oder als ein Befehl:

sed -n '/STEP 005450/{ /ACTIVATED/,/FAILURE/{ /ACTIVATED/{h;b}; H; /FAILURE/{g;p}; }; }' file 

Ausgang:

 
STEP 005450 ***ACTIVATED*** Thu Oct 5 17:31:05 CEST 2017 
STEP 005450 REF R-A493 STEP 000010 (command -s ) 
STEP 005450 ***FAILURE*** Thu Oct 5 17:31:05 CEST 2017 Return code : 2 
+0

Es funktioniert nicht: /. Es gibt mir diesen Fehler zurück: sed: das Label/ACTIVATED /,/FAILURE/{/ ACTIVATED/{h; b}; H;/FAILURE/{g; p}; } ist größer als acht Zeichen. – AaronLbk

+0

Schade. Es war einen Versuch wert. – Cyrus

+0

Versuchen Sie '' 's bei jeder logischen Gelegenheit hinzuzufügen., D. H.'/ACTIVATED/{; h; b;}; 'Einige seds sind sehr speziell darüber, wie sie Dinge parsen und AIX ist auf so viele Arten besonders ;-). Viel Glück. – shellter

Verwandte Themen