2016-08-05 64 views
0

ich eine Log-Zeile des folgenden Formats habe:Drucke einen Teil von lügen

2016-08-04 19:12:02,537 INFO ...<Thread-4> - Got a message [......|clientTradeId=xxxxxxx|timeInForce=xxxx|.....TradeResponseMessage] 

Ich würde Schlüssel Phrase alle Zeilen mit der ‚einer Nachricht Got‘ extrahieren muß, und dann ausdrucken nur die ‚clientTradeId = xxxxxxx 'Teil der resultierenden Shortlist.

Wie erreiche ich das mit Scripting (grep und schneiden - oder gibt es eine bessere Option)

+1

Das Ziel ist, dass Sie einen eigenen Code hinzufügen, um zumindest die Forschungsanstrengungen zu zeigen, die Sie unternommen haben, um das Problem selbst zu lösen. – Cyrus

Antwort

0

Daten Betrachtet man ist in der Datei DATA.LOG

grep -F "Got a message" data.log | grep -Po "clientTradeId=[^| ]+" 

mit cut

grep -F "Got a message" data.log | cut -f2 -d'|' 
+0

kann mit einzelnen Grep selbst gemacht werden 'grep -oP 'Haben Sie eine Nachricht. * \ KclientTradeId [^ |] +'' – Sundeep

-1

AKTUALISIERT COMMAND dank @BenjaminW:

sed -rn 's/.*(clientTradeId=[0-9]*).*/p' file 

Hab sed nicht benutzt, aber ich habe Regex benutzt.

bei der Dokumentation der Suche nach sed

cat file | sed '/.*(clientTradeId=[0-9]*).*/\1/' 

Was das bedeutet ist Rohr um die Datei zu sed, dann, regex verwenden, wählen Sie den Teil, den Sie wollten, dann Ausgabe, die es (hoffe ich).

+0

Dies sollte wahrscheinlich eine Substitution sein ('s ///') - so wie es jetzt ist, es ' lle Zeilen auswählen, die mit '. * (clientTradeId = [0-9] *). * 'übereinstimmen, und dann den Befehl' \ 1/'ausführen, was nicht funktioniert. Außerdem müßten Sie '\ (\)' für Capture-Gruppen verwenden oder die Option '-r' (' -E' für BSD sed), um '()' zu verwenden. Schließlich, keine Notwendigkeit für "Katze": "sed" "Datei" ist das gleiche, aber nicht eine Unterschale spawnen. –

+1

@Cyrus Ich bin ziemlich neu auf Fragen zu beantworten. Danke für den Link. – Fio

+0

@BenjaminW. Danke für die Inside Ich werde meine Antwort ändern – Fio