我怎样才能得到所有“clid”的“client_type=0”?管道字符“”分隔每个客户机信息。我只有一行文字:
clid=2 cid=3346 client_database_id=5153 client_nickname=xlukas\s\p\slukas client_type=0 clid=3 cid=3346 client_database_id=1 client_nickname=powered\sby\smirwayne.de
客户机类型=1客户机ID=4 CID=3346客户机数据库ID=9661
客户机昵称=number\sone客户机_type=0 clid=5 cid=3469
client_database_id=1 client_nickname=powered\sby\smirwayne
客户机类型=1 clid=6 cid=1716客户机数据库_id=1
客户机昵称=fg\sbot客户机_类型=1 clid=7 cid=3469
客户机数据库ID=9661客户机昵称=number\stwo
客户机类型=0客户机ID=8 CID=1762客户机数据库ID=4351
客户机昵称=pr0zkillz1x\ptobi客户机_type=0 clid=9 cid=1764
客户端数据库ID=5160客户端昵称=xl1Mited\s/\smax
客户机类型=0客户机ID=10 cid=1716客户机数据库ID=9704
客户机昵称=sebi客户机类型=0 clid=13 cid=3346
客户机数据库ID=4336客户机昵称=checker284\s\p\ssebbo
客户机类型=0客户机ID=19 CID=1762客户机数据库ID=9312
客户机昵称=pr0skillz1x\pdanie客户机_type=0 clid=30 cid=3346
客户机数据库ID=9697客户机昵称=teamspeakuser
客户机类型=0客户机ID=33 cid=1716客户机数据库ID=1
客户机昵称=服务器管理客户机类型=1
我需要alle clid's,它有一个额外的行中的client_type=0。例如:

    clid=2
    clid=3
    clid=4
    clid=5
    ...

我当前的解决方案不起作用:
    cat clientlist.txt | grep -Eo "clid=[0-9]+[\d\D]*client_type=0" | grep -Eo "clid=[0-9]+"

有人能帮忙吗?

最佳答案

管道字符“”分隔每个客户机信息。
利用这些信息,您可以说:

tr '|' '\n' < clientlist.txt | grep -Po 'clid=\d+(?=.*client_type=0)'

对于您的输入,它将导致:
clid=2
clid=4
clid=7
clid=8
clid=9
clid=10
clid=13
clid=19
clid=30

关于regex - Linux Shell脚本:如何将子字符串与正则表达式匹配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20260795/

10-12 18:52