Ubuntu

grep 在 Fedora 和 Ubuntu 上的表現不同

  • October 2, 2014

所以當我在 Fedora 中執行它時,我看到了這個:

$ ls hmm_data/indivA12_AATAAG/refs/par1/
2R-orths.alleles  2R-ref.alleles
$ ls hmm_data/indivA12_AATAAG/refs/par1/ | grep -F '-ref.alleles'
2R-ref.alleles

但是當我在 Ubuntu(相同數據)上執行時,我沒有從 grep 中得到任何結果:

$ ls hmm_data/indivA12_AATAAG/refs/par1/
2R-orths.alleles  2R-ref.alleles
$ ls hmm_data/indivA12_AATAAG/refs/par1/ | grep -F '-ref.alleles'

任何想法可能會發生什麼?我怎樣才能想出在兩個系統上都可以工作的東西?

grep -F '-ref.alleles'

相當於:

grep -F -ref.alleles

(撇號之間的字元都不是 shell 元字元,所以引用它們沒有任何效果。)

這又相當於:

grep -F -r -e f.alleles

通過正常解析-前綴選項。該-e選項需要一個參數,但-F不要-r

由於您沒有為 grep 指定任何文件,因此預設行為是對標準輸入進行操作…除了該-r選項沒有意義,因此它預設為.遞歸搜尋(目前目錄)並忽略標準輸入。在某些版本中。

您需要在以as--開頭的正則表達式之前使用“沒有更多選項”指示符-

grep -F -- -ref.alleles

我追踪了-r沒有文件參數的行為發生變化的點。它是 2.11 版,於 2012 年 3 月 2 日發布。請參閱發佈公告。

影響行為的 git 送出是thisthis

如果你grep --version在你的兩台機器上執行,我相信你會發現其中一台在 2.11 的錯誤一側

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