这是这个问题. 差异如下。
以下是 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。
如果我的推断不正确,请编辑您的帖子以包含对您不起作用的特定行。一旦将此 sed 命令应用于 foo.txt,您上面发布的行对我来说就可以正确地执行 grep。