2012-05-31 48 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: