FedoraとUbuntuでgrepの動作が異なる


13

したがって、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'

何が起こっているのでしょうか?両方のシステムで同じように動作するものを思い付くにはどうすればよいですか?


どうls *-ref.alleles
グレンジャックマン14年

@glennjackman、私はそのことを考えて誰かがいることを正確に行なったし、私が修正しようとしているbashスクリプトでアウトその行:-)私は、彼らは理由があったと仮定することができます...コメント
Greg_the_Ant

回答:


30
grep -F '-ref.alleles'

以下と同等です:

grep -F -ref.alleles

(アポストロフィの間の文字はいずれもシェルメタキャラクターではないため、それらを引用しても効果はありません。)

これは次と同等です:

grep -F -r -e f.alleles

-接頭辞付きオプションの通常の解析による。-eオプションは引数を取りますが、-F及び-rません。

grepにファイルを指定しなかったため、デフォルトの動作はstdin ...を実行することです。ただし、-rオプションは意味をなさないため、.代わりに再帰的に(現在のディレクトリ)を検索し、stdinを無視します。一部のバージョン。

あなたは使用する必要がある--と始まることを正規表現の前に「これ以上のオプション」インジケータを-同様に

grep -F -- -ref.alleles

-rファイル引数を使用しない場合の動作が変更されたポイントを追跡しました。2012年3月2日リリースのバージョン2.11でした。リリースのお知らせをご覧ください。

動作に影響を与えたgitコミットは、これこれです。

grep --version2台のマシンで実行する場合、そのうちの1台が2.11の間違った側にあることに気付くはずです。


動作が変更されたバージョンまでのすべての調査に感謝します。
richardneish

2
ありがとう そうです、grep 2.6.3とgrep 2.14があります。
Greg_the_Ant

6

一番-の問題は問題です。同じ結果を取得するには、--次を追加します。

grep -F -- '-ref.alleles'

からman bash

A -- signals the end of options and disables further option
processing. Any arguments after the -- are treated as filenames
and arguments.

1
UbuntuとFedoraで異なるのはなぜですか?それらの両方に同じ否定的な結果を与えるべきではありませんか?
グルーオン14年

ありがとう。このコマンドを別のコマンドにパイプする場合、-はそこで問題を引き起こしますか?または、それが表示されるコマンドに適用されますか?
Greg_the_Ant 14年

4
bashのマニュアルページは、実際には関係ありません。これは、--bashのコマンドラインでの処理を説明します。これは、grepの理解から独立してい--ます。一般的な慣習であるため、同じように機能しますが、一般的に、シェルのマニュアルページでは、他のプログラムへの引数の意味について何も説明されていません。

1

grepコマンドに動作をオーバーライドするエイリアスがある場合は、.bashrcを確認してください。たぶんそれが問題です。また、「-F」パラメータなしでgrepを試してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.