egrep は、リストのパターンに一致する行だけでなく、すべてを出力します。

egrep は、リストのパターンに一致する行だけでなく、すべてを出力します。

私は過去に通常、次のようにegrepを正常に使用しました。

egrep -f list_of_patterns big_file_to_look_for_patterns > selected_patterns_from_big_file

ところで今朝も同じことをしようとしましたが、引き続きすべてを出力に持ってきています。 -> リストを通じて提供したパターンだけでなく、私が探しているファイル全体も出力されます。

ドキュメントはここにあります:https://filebin.net/ibovbjy68x4a8kez

パターンリスト: "allMAGs_list_85_5_list"

big_file_to_look_for_patterns: "良いファイル"

grepに似た問題を抱えている誰かの以前の投稿に基づいてtr '\r' '\n'キャリッジリターンを削除しようとしましたが、役に立ちませんでした...

事前にありがとう

答え1

最初の注意:廃止され、egrepある時点で削除される可能性があるため、grep -E代わりに使用してください。これで問題は、スキーマファイルに空白行が含まれていることです。したがって、grepはすべての行で見つかった空の文字列を見つけるため、すべての結果が返されます。ここでも同じ内容を見ることができます。

$ seq 10 | grep "" 
1
2
3
4
5
6
7
8
9
10

ファイルから空白行を削除してもう一度やり直してください。

sed '/^$/d' allMAGs_list_85_5_list > fixed.list
grep -Ef fixed.list goodfile 

次のコマンドを使用して元のリストファイルを回復することもできます。

sed -i '/^$/d' allMAGs_list_85_5_list

またはすぐに実行してください。

grep -Ef <(sed '/^$/d' allMAGs_list_85_5_list) goodfile 

関連情報