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 中进行反斜杠转义(仅)。

进行整体修改的一种方法是sed

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

这样您将得到修改后的 foo.txt 和原始文件 foo.txt.bak。

如果我的推断不正确,请编辑您的帖子以包含对您不起作用的特定行。一旦将此 sed 命令应用于 foo.txt,您上面发布的行对我来说就可以正确地执行 grep。

相关内容