2016-09-29 2 views
0

Ich habe eine Datei mit Inhalt wie folgt: Dateiname: input..txtdas Wort filtern und seinen Wert aus einer Datei

<autoCommit=false, currentThread=Thread[[ACTIVE] ExecuteThread: '6' for queue: 'weblogic.kernel.Default (self-tuning)',5,Pooled Threads],connectTime=102,lastUser=null,currentError=null,currentErrorTimestamp=null,JDBC4Runtime=true,supportStatementPoolable=true,needRestoreClientInfo=false,defaultClientInfo={},supportIsValid=true> 
    > <autoCommit=false,enabled=true,isXA=false,isJTS=false,vendorID=100,connUsed=false,doInit=false,'null',destroyed=false,poolname=ApplicationDB,appname=null,moduleName=null,connectTime=98,**dirtyIsolationLevel=false,initialIsolationLevel=2,infected=false,lastSuccessfulConnectionUse=1475188184480,secondsToTrustAnIdlePoolConnection=0,currentUser=java.lang.Exception 

ich will alle Muster mit Connect grep = mit seinem Wert zugeordnet ist.

for example from above file the o/p will be: 
connectTime=102 
connectTime=98 

Versuchte
egrep -r 'connectTime=' input.txt 

Antwort

1

Nur nicht, dass:

egrep -o "connectTime=[0-9]+" input.txt 
0

awk Lösung: Dies wird in der Datei pro Zeile alle Feld abfragen durch und wenn überhaupt eingereicht enthält Connect dann drucken, dass Feld.

awk -F, '{for(i=1;i<=NF;i++) if($i ~ "connectTime") print $i}' inputfile 
connectTime=102 
connectTime=98 

Oder wenn Sie streng sein über die Werte von Connect eine Ziffer zu sein, dann:

awk -F, '{for(i=1;i<=NF;i++) { if($i ~ "connectTime=[[:digit:]][^[:alpha:]]") print $i}}' inputfile 

oder grep:

grep -oP 'connectTime=[0-9]+' inputfile 
    connectTime=102 
    connectTime=98 

oder diese leicht brechen kann. Dies funktioniert nur, wenn auf connecTime=somenumber ein comma Zeichen folgt. welches in den bereitgestellten Daten vorhanden ist. Dies wird alles nach connectTime drucken.

grep -oP 'connectTime.*?(?=,)' inputfile 
connectTime=102 
connectTime=98 

Wenn Sie es für den Fall streng machen wollen, in der nur Zahlen von Connect dann

grep -oP 'connectTime.[0-9]*?(?=,)' inputfile 
0

Mit sed gefolgt sind:

$ sed 's/.*\(connectTime=[0-9]*\).*/\1/' input.txt 
connectTime=102 
connectTime=98 
Verwandte Themen