0

我有以下文件: 2013-07-17_19-12-42.dcrec

如何在文件中搜索和隔离以下字符串模式:

客户端 0 的新名称,keyID = 000000,IP = 000.000.000.000:somename

客户端 # 可以是任何数字,keyid 是任何数值(客户端 # 或 keyID 没有设置长度),IP 是任何普通 IPv4 地址,somename 可以是任何用户名(用户名可以包含特殊字符,例如如#、^、@、空格等)。看起来字符串是用“^Bvs”“关闭”的。这是两个字符串的示例(请参见屏幕截图)

示例 1

示例 2

每个文件中可以有任意数量的这些字符串。如果我可以在文件中搜索并列出这些字符串的所有实例,那就太好了。目前我对 grep 等不太擅长,否则我可以自己做。任何帮助将不胜感激,谢谢!

4

2 回答 2

2
$> strings 2013-07-17_19-12-42.dcrec | grep -o -P "New name for client [0-9]+, keyID = [0-9]+, IP = [0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3} : [^\ ]+"                          
New name for client 7, keyID = 562830, IP = 91.193.208.105 : Sobieski
New name for client 8, keyID = 255344, IP = 63.153.210.124 : Cultist
New name for client 11, keyID = 5061431, IP = 116.240.255.94 : Sammy
New name for client 12, keyID = 5061453, IP = 196.20.195.114 : Dirk
New name for client 13, keyID = 4278381, IP = 188.110.185.183 : CSTO
New name for client 14, keyID = 369397, IP = 81.110.45.165 : General
New name for client 16, keyID = 5061651, IP = 85.4.29.162 : Thatsuseless
New name for client 17, keyID = 5061688, IP = 90.213.51.77 : NewPlayer
New name for client 18, keyID = 4905930, IP = 174.109.181.108 : Solo
New name for client 19, keyID = 5061695, IP = 85.4.236.70 : Quizzman
New name for client 21, keyID = 2745089, IP = 95.128.68.231 : NewPlayer
New name for client 22, keyID = 5061536, IP = 195.91.236.65 : POWERFUCKER
New name for client 24, keyID = 5061698, IP = 86.121.66.142 : TheDoctor
New name for client 26, keyID = 5061585, IP = 5.69.250.33 : Hydrogen

说明:

  • 如果输入文件是二进制格式,则可以对其进行处理strings以检索所有文本;
  • 客户端 # 可以是任意数字[0-9]+
  • keyid 是任何数值[0-9]+
  • IP 是任何普通的 IPv4 地址[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
  • somename 可以是任何用户名(用户名可以包括特殊字符,例如 #、^、@、空格等)[^\ ]+这意味着“没有空格”

好像第一次就够了。是的,所有这些正则表达式都可以改进。

.*UPD:实际上,最后一个字段(somename)的正则表达式看起来更好

于 2013-07-17T21:07:40.830 回答
1
grep --binary-files=text -o 'New name for client[^^B]*' 2013-07-17_19-12-42.dcrec

[^^B]*部分是正则[^后跟ctrl+v后跟ctrl+b和正则],这意味着任何不是^B控制字符的字符。

输出

New name for client 7, keyID = 562830, IP = 91.193.208.105 : Sobieski
New name for client 8, keyID = 255344, IP = 63.153.210.124 : Cultist O Khorne
New name for client 11, keyID = 5061431, IP = 116.240.255.94 : Sammy
New name for client 12, keyID = 5061453, IP = 196.20.195.114 : Dirk Diggler
New name for client 13, keyID = 4278381, IP = 188.110.185.183 : CSTO
New name for client 14, keyID = 369397, IP = 81.110.45.165 : General Ivan
New name for client 16, keyID = 5061651, IP = 85.4.29.162 : Thatsuseless
New name for client 17, keyID = 5061688, IP = 90.213.51.77 : NewPlayer
New name for client 17 (NewPlayer), keyID = 5061688, IP = 90.213.51.77 : MHT
New name for client 18, keyID = 4905930, IP = 174.109.181.108 : Solo Wing Pixy
New name for client 19, keyID = 5061695, IP = 85.4.236.70 : Quizzman
New name for client 21, keyID = 2745089, IP = 95.128.68.231 : NewPlayer
New name for client 18 (Solo Wing Pixy), keyID = 4905930, IP = 174.109.181.108 : Jane The Killer
New name for client 22, keyID = 5061536, IP = 195.91.236.65 : POWERFUCKER
New name for client 24, keyID = 5061698, IP = 86.121.66.142 : TheDoctor
New name for client 26, keyID = 5061585, IP = 5.69.250.33 : Hydrogen

如果要过滤掉以下行:

New name for client 17 (NewPlayer), keyID = 5061688, IP = 90.213.51.77 : MHT
New name for client 18 (Solo Wing Pixy), keyID = 4905930, IP = 174.109.181.108 : Jane The Killer

使用上述的变体:

grep --binary-files=text -o 'New name for client [0-9]\+,[^^B]*' \
   2013-07-17_19-12-42.dcrec
于 2013-07-18T07:23:32.520 回答