2017-03-24 32 views
0

我想查找全部我在一個文件('file1.txt')中找到的文本在另一個文件中找到的匹配項('file2.txt ')使用grep選項-f,它告訴讀取從文件中找到的表達式。使用'grep -f'選項獲取所有匹配

'FILE1.TXT'

一個

一個

'FILE2.TXT'

一個

當我運行下面的命令:

的grep -f file1.txt file2.txt -w

我只得到'a'的輸出一次。相反,我想獲得兩次,因爲它在我的'file1.txt'文件中出現兩次。有沒有辦法讓grep(或任何其他Unix/Linux)工具輸出它讀取的每一行匹配? 在此先感謝。 阿圖羅

+0

*文本匹配* - 一些確切的文本?它應該比較線路? – RomanPerekhrest

+0

是的,它包含完全匹配。在輸入之後,我添加了-w選項。是的,這是逐行比較。 – Arturo

回答

0

Grep按設計工作,只提供一條輸出線。 你可以使用另一種方法:

while IFS= read -r pattern; do 
    grep -e $pattern file2.txt 
done < file1.txt 

這將使用FILE1.TXT每行作爲grep的模式,從而導致你要找的輸出。

+0

這個伎倆!謝謝。它甚至比我以前的grep命令快得多。 – Arturo

0

當您使用

grep -f pattern.txt file.txt 

這意味着匹配文件file.txtpattern.txt找到模式。

它只給你一個輸出,因爲這是第二個文件中的全部內容。

嘗試交換文件,

grep -f file2.txt file1.txt -w 

這是否回答你的問題?

+0

我明白,但是我仍然想找到一種方法來打印匹配,每次在'file.txt'中找到'pattern.txt'中的模式(即使是重複的模式)。即使是工具或腳本,而不是'grep -f'就足夠了。 – Arturo