从文件中过滤掉单词及其值

时间:2016-09-29 22:45:57

标签: shell awk sed grep

我有一个包含以下内容的文件:filename:input..txt

   <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

我想使用connectTime =与其值相关联来grep所有模式。

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

尝试

 egrep -r 'connectTime='  input.txt

3 个答案:

答案 0 :(得分:1)

就这样做:

df["new_column"] = df['review'].apply(remove_punctuations)

答案 1 :(得分:1)

awk解决方案:这将轮询文件中每行的所有字段,如果任何字段包含connectTime,则打印该字段。

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

或者,如果您想严格将connectTime的值设为数字,那么:

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

grep

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

或者这可能很容易破裂。这仅在connecTime=somenumber后跟comma符号时才有效。这在提供的数据中存在。这将在connectTime之后打印任何内容。

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

如果你想严格遵守只有数字后跟connectTime的情况,那么

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

答案 2 :(得分:1)

使用sed:

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