Perl 没有给出预期的输出

  • 本文关键字:输出 Perl perl
  • 更新时间 :
  • 英文 :


我正在尝试对任何具有 employeeID 数字的内容进行模式匹配搜索:xxxxxxx 并带来所有匹配的条目。但它似乎没有按预期工作。反之亦然,其中将 employeeID 字段中没有数字的所有条目都带进来。

我的测试文件

dn: CN=User One,OU=Disabled,OU=People,DC=training,DC=example,DC=
 com  
userAccountControl: 514  
employeeID: user1  
comment: HIRED  
sAMAccountName: user1  
dn: CN=Given-iPad01,OU=Room,DC=training,DC=example,DC=com  
userAccountControl: 544  
employeeID: Given-iPad01  
sAMAccountName: Given-iPad01  
lastLogonTimestamp: 130678281934843750    
dn: CN=User Two,OU=Admins,DC=training,DC=example,DC=com  
userAccountControl: 512  
employeeID:: IDE2NzQwODg=  
sAMAccountName: user2  
lastLogonTimestamp: 131685330348725308    
dn: CN=Test User2,OU=2012,OU=People,DC=training,DC=example
 ,DC=com  
userAccountControl: 512  
employeeID: testuser2  
sAMAccountName: testuser2  
lastLogonTimestamp: 131328157284117480    
dn: CN=User Three,OU=People,DC=training,DC=example,DC=com  
userAccountControl: 512  
employeeID: 123456  
comment: HIRED  
sAMAccountName: user3  
lastLogonTimestamp: 131679287880585713   

我的预期输出是带来除具有 employeeID:testuser 的条目之外的所有内容,但我的结果仅来自我有 employeeID: 123456 的条目。
以下是我一直在寻找的

dn: CN=User One,OU=Disabled,OU=People,DC=training,DC=example,DC=com  
userAccountControl: 514  
employeeID: user1  
comment: HIRED  
sAMAccountName: user1    
dn: CN=User Two,OU=Admins,DC=training,DC=example,DC=com  
userAccountControl: 512  
employeeID:: IDE2NzQwODg=  
sAMAccountName: user2  
lastLogonTimestamp: 131685330348725308    
dn: CN=User Three,OU=People,DC=training,DC=example,DC=com  
userAccountControl: 512  
employeeID: 123456  
comment: HIRED  
sAMAccountName: user3  
lastLogonTimestamp: 131679287880585713    
dn: CN=Test User2,OU=2012,OU=People,DC=training,DC=example,DC=com  
userAccountControl: 512  
employeeID: testuser  
sAMAccountName: testuser  
lastLogonTimestamp: 131328157284117480    
dn: CN=Given-iPad01,OU=Rooms,DC=training,DC=example,DC=com  
userAccountControl: 544  
employeeID: Given-iPad01  
sAMAccountName: Given-iPad01  
lastLogonTimestamp: 130678281934843750    

以下是我尝试过的:在 employeeID 条目
上的任何位置提取包含数字的内容 perl -000 -ne 'print if /employeeID: [0-9]/' testfile

不要在 employeeID 条目上的任何位置拉取那些包含数字的数字 perl -000 -ne 'print if !/employeeID: [0-9]/i' testfile

数字前面可能带有除换行符以外的任何内容。 .匹配除换行符以外的任何内容,.*表示可以有 0 个或更多这样的字符。 需要/m才能使^匹配成为行的开头而不是字符串的开头。

perl -000 -ne 'print if /^employeeID: .*[0-9]/m' -- file

Perl 当然非常适合这个任务,但它可能更容易:

grep -E -B 2 -A 3 'employeeID:s*.*[0-9]+.*' ./testfile

没有看到这一个行的预期输出的原因是你告诉perl只匹配[0-9]的东西。 您需要在表达式中量化这一点(使用 +* (,并匹配非数字字符(例如 .* (。

最好阅读正则表达式的工作原理。下面是一个可以使用此特定表达式的环境:https://regexr.com/3o9av

最新更新