Windows

將具有多種模式的文件傳遞給 grep

  • January 9, 2011

假設我們有兩個文件。

match.txt:包含要匹配的模式的文件:

fed ghi
tsr qpo

data.txt:包含文本行的文件:

abc fed ghi jkl
mno pqr stu vwx
zyx wvu tsr qpo

現在,我想發出一個 grep 命令,該命令應該從data.txt返回第一行和第三行:

abc fed ghi jkl
zyx wvu tsr qpo

…因為這兩行中的每一行都匹配match.txt中的一個模式。

我試過了:

grep -F -f match.txt data.txt

但這不會返回任何結果。

grep 資訊:GNU grep 2.6.3 (cygwin)

作業系統資訊:Windows 2008 R2

更新:似乎 grep 被搜尋模式行中的空格弄糊塗了,但是使用 -F 標誌,它應該將match.txt中的每一行視為單獨的匹配模式。

解決方法如下:

使用命令:tr -d "\r" <match.txt | grep -F -f - text.txt

對於通過 -f 標誌呈現給它的匹配文件,似乎grep沒有正確尊重 Windows 行尾 (CR/LF)。該tr命令可用於從匹配文件中去除輸入,並且 - 特殊標誌可與 一起使用grep,以強制它從標準輸入中讀取匹配文件。

由於它適用於 Unix,也許您需要更高版本的 grep?

>cat d
abc fed ghi jkl
mno pqr stu vwx
zyx wvu tsr qpo

>cat p
fed ghi
tsr qpo

>grep -F -f p d
abc fed ghi jkl
zyx wvu tsr qpo

如果您將模式更改為

fed\040ghi
tsr\040qpo

引用自:https://serverfault.com/questions/194904