[英]Linux shell script: How to match substring with regex
如何获得所有具有“ client_type = 0”的“ clid”? 管道字符“ |” 分隔每个客户信息。 我的文字只有一行:
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 client_type = 1 | clid = 4 cid = 3346 client_database_id = 9661 client_nickname = Number \\ sone client_type = 0 | clid = 5 cid = 3469 client_database_id = 1 client_nickname = powered \\ sby \\ sMirWayne client_type = 1 | clid = 6 cid = 1716 client_database_id = 1 client_nickname = FG \\ sBot client_type = 1 | clid = 7 cid = 3469 client_database_id = 9661 client_nickname = Number \\ stwo client_type = 0 | clid = 8 cid = 1762 client_database_id = 4351 client_nickname = pr0zkillz1x \\ pTobi client_type = 0 | clid = 9 cid = 1764 client_database_id = 5160 client_nick \\ s = xL1mit / \\ sMax client_type = 0 | clid = 10 cid = 1716 client_database_id = 9704 client_nickname = Sebi client_type = 0 | clid = 13 cid = 3346 client_database_id = 4336 client_nickname = checker284 \\ s \\ p \\ sSebbo client_type = 0 | clid = 19 cid = 1762 client_database_id = 9312 client_nickname = pr0skillz1x \\ pDanie client_type = 0 | clid = 30 cid = 3346 client_database_id = 9697 client_nickname = T eamSpeakUser client_type = 0 | clid = 33 cid = 1716 client_database_id = 1 client_nickname = serveradmin client_type = 1
我需要alle clid,在另一行中有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]+"
有人可以帮忙吗?
使用sed:
tr '|' '\n' < file | sed -n '/client_type=0/s/\(clid=[0-9]*\).*$/\1/p'
clid=2
clid=4
clid=7
clid=8
clid=9
clid=10
clid=13
clid=19
clid=30
管道字符“ |” 分隔每个客户信息。
利用这些信息,您可以说:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.