Это продолжениеэтот вопрос. Различия перечислены ниже.
Вот отрывок из того, что находится внутри 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 (только).
Один из способов сделать эту модификацию массово sed
:
sed -i.bak -e 's/\[/\\[/g' -e 's/\]/\\]/g' foo.txt
В результате у вас останется измененный foo.txt и исходный файл foo.txt.bak.
Если мои выводы неверны, пожалуйста, отредактируйте свой пост, включив конкретные строки, которые у вас не работают. Строки, которые вы разместили выше, у меня корректно grep-ятся, как только эта команда sed применяется к foo.txt.