2012-05-31 46 views
8

我正在使用grep -f函数从文件中提取符合特定模式的行。假设我的模式文件是pattern.txt,如下所示。关于'grep -f':与文件匹配模式

1 
2 
3 
4 
5 

和反对它,我此模式匹配的是file.txt文件,

1::anv 
2::tyr 
3::yui 
4::fng 
5::gdg 
6::ere 
7::rer 
8::3rr 
9::gty 

现在,当我做的grep -f pattern.txt file.txt的,我得到这个 - >

1::anv 
2::tyr 
3::yui 
4::fng 
5::gdg 
8::3rr 

上面输出的最后一行是我的问题。我如何修改这个grep命令以获得输出(显示正确的对应关系)如下?

1::anv 
2::tyr 
3::yui 
4::fng 
5::gdg 
+0

我试过grep“'patt.txt'”file.txt | awk -F'::''{print $ 1“'$ 2}'但是这也给我带来了同样的问题。 – ana

回答

12

之前,你的模式添加^使grep将匹配行开始与你的格局。如果你的模式实际上是一组数字,你不需要模式列表。只需使用^[1-5]:

+0

谢谢。它做到了。 – ana

+4

只是意识到^ 1将匹配10 :,等等,如果数字得到那么大。 –

6

那么,有很多可能的解决方案。您正在告诉grep查找所有包含3的行,而'8 :: 3rr'行实际上包含3,因此您需要更具体地查找您要查找的内容。例如,您可以将模式更改为“1:”,“2:”等,以仅匹配后跟冒号的数字。或者,您可以将它们更改为'^ 1','^ 2'等,以仅匹配行首的数字。这取决于你的数据,但可能你想要两个,所以你搜索'1:'不匹配'21:',你搜索'^ 5'不匹配'53:'。在这种情况下,你的模式文件会喜欢这样的:

^1: 
^2: 
^3: 
^4: 
^5: