grep -Ef は「無効な文字範囲」と表示します。

grep -Ef は「無効な文字範囲」と表示します。

これはこの質問違いは以下の通りです。

以下は foo.txt の内容の抜粋です (非常に大きいです)。

^.{64}  /Volumes/Documents - Part 1/July 2009/Mum & Dad/Winter Wonderland [日本].mkv$
^.{64}  /Volumes/Documents - Part 1/March 2004/Mac OS X/Adobe Illustrator Documents/swimming.zip$

以下は bar.txt の内容の抜粋です (これも巨大です)。

c815bebbc553fdf13b16bc99d417053cbe22c13c714d12cf16e740516a5cdeda  /Volumes/Documents - Part 1/July 2009/Mum & Dad/Winter Wonderland [日本].mkv
cab951c9779db6d484cec544482e742c75effea61c426264cb47788fddd4999e  /Volumes/Documents - Part 1/March 2004/Baseball/Pro Yakyuu.7z
635431114b7d898cfebd78f25b50bfea1f1593c292c15e631377347abba3e0e6  /Volumes/Documents - Part 1/March 2004/Mac OS X/Adobe Illustrator Documents/swimming.zip

実行するコマンドは次のとおりです。

grep -Ef foo.txt bar.txt

grepこう吐き出す:

grep: invalid character range

代わりに、grep次のように出力します:

c815bebbc553fdf13b16bc99d417053cbe22c13c714d12cf16e740516a5cdeda  /Volumes/Documents - Part 1/July 2009/Mum & Dad/Winter Wonderland [日本].mkv
635431114b7d898cfebd78f25b50bfea1f1593c292c15e631377347abba3e0e6  /Volumes/Documents - Part 1/March 2004/Mac OS X/Adobe Illustrator Documents/swimming.zip

何が間違っているのでしょうか?grep必要なものを出力するには何を変更する必要がありますか?

Mac OS X Yosemite、bash 3.2.57(1)リリース

答え1

OP へのコメントから推測すると、foo.txt の括弧文字 "[" と "]" を bar.txt の対応するリテラル括弧文字と一致させたいということです。それが正しいと仮定すると、foo.txt (のみ) でバックスラッシュでエスケープする必要があります。

この変更を一括して行う 1 つの方法は、次のとおりですsed

sed -i.bak -e 's/\[/\\[/g' -e 's/\]/\\]/g' foo.txt

こうすると、変更された foo.txt と、元のファイル foo.txt.bak が残ります。

私の推論が正しくない場合は、投稿を編集して、機能しない特定の行を含めてください。この sed コマンドを foo.txt に適用すると、上記で投稿した行は grep で正しく実行されます。

関連情報