2017-09-01 90 views
-1

我在我的文件中有以下行。我想grep我的日志文件中的所有行,其中baseFileName不等于我的文件名。在下面的情况下它应该打印第1行,因为TEST boo.docx不等于Test foo-boo.docx。grep文件和匹配字符串在一行

2017-06-19 21:54:11,773 mimeType=docx,baseFileName=TEST boo.docx,fileNamePrefix=7ff852cb-b1db-49d3-ba71-e151dbc1f41e,doEncrypt=true,decryptedFileSize=125589,Test foo-boo.docx [source:MessageConsumer] 

2017-06-19 21:54:11,774 mimeType=docx,baseFileName=TEST foo.docx,fileNamePrefix=7ff852cb-b1db-49d3-ba71-e151dbc1f41e,doEncrypt=true,decryptedFileSize=125589,Test foo.docx [source:MessageConsumer] 
+0

你说的“我的文件名是什么意思“? – batMan

回答

1

由于这是问题有一个UNIX标签:

grep -P "baseFileName=([^,]+),.*,\1" test.txt 

说明:

baseFileName=([^,]+)  # first pair of parentheses gives you baseFilename     
,.*,      # read ',' followed by anything, followed by ',' 
\1       # backreference to baseFilename 

测试:

$ cat test.txt 
2017-06-19 21:54:11,773 mimeType=docx,baseFileName=TEST 
boo.docx,fileNamePrefix=7ff852cb-b1db-49d3-ba71- 
e151dbc1f41e,doEncrypt=true,decryptedFileSize=125589,Test foo-boo.docx  
[source:MessageConsumer] 

2017-06-19 21:54:11,774 mimeType=docx,baseFileName=TEST 
foo.docx,fileNamePrefix=7ff852cb-b1db-49d3-ba71- 
e151dbc1f41e,doEncrypt=true,decryptedFileSize=125589,TEST foo.docx  
[source:MessageConsumer] 
2017-06-19 21:54:11,774 
mimeType=docx,baseFileName=aaa.docx,fileNamePrefix=7ff852cb-b1db-49d3- 
ba71-e151dbc1f41e,doEncrypt=true,decryptedFileSize=125589,aaa.docx  
[source:MessageConsumer] 

$ grep -P "baseFileName=([^,]+),.*,\1" test.txt 
2017-06-19 21:54:11,774 mimeType=docx,baseFileName=TEST 
foo.docx,fileNamePrefix=7ff852cb-b1db-49d3-ba71- 
e151dbc1f41e,doEncrypt=true,decryptedFileSize=125589,TEST foo.docx  
[source:MessageConsumer] 
2017-06-19 21:54:11,774 
mimeType=docx,baseFileName=aaa.docx,fileNamePrefix=7ff852cb-b1db-49d3- 
ba71-e151dbc1f41e,doEncrypt=true,decryptedFileSize=125589,aaa.docx  
[source:MessageConsumer] 
+0

Thanks.I have a space'2017-06-19 21:54:11,773 mimeType = docx,baseFileName = TEST boo.docx,fileNamePrefix = 7ff852cb-b1db-49d3-ba71-e151dbc1f41e,doEncrypt = true,decryptedFileSize = 125589, 测试foo-boo.docx [来源:MessageConsumer]' – javascriptlearner

+0

在你的例子中,文件名是不同的。一个包含全部大写字母,另一个仅以首都开头。 –

+0

这是正确的,你在猫提到的例子是完美的,但只有我在我的日志中有一个空间。 'mimeType = docx,baseFileName = aaa.docx,fileNamePrefix = 7ff852cb-b1db-49d3- ba71-e151dbc1f41e,doEncrypt = true,decryptedFileSize = 125589,aaa.docx [source:MessageConsumer]'。请不要在aaa.docx – javascriptlearner