grep -Ef说'无效字符范围'。再次


0

这是这个问题的后续内容。差异如下。

这里是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
foo.txt在某处包含方括号吗?
choroba

1
@choroba是的,确实如此。它包含了很多unicode角色,比如日本
leetbacoon

1
您想grep将方括号中的字符串解释为字符类吗?如果是这样,您需要确保范围从不以错误的顺序列出字符。如果没有,则反斜杠方括号。
choroba

@choroba我想grep将它们解释为文字字符。那么,使用括号看起来\[\]foo.txt和bar.txt一样?
leetbacoon

我希望有一个更有效的解决方案。我的一些文件有\[\]他们的名字。我不确定,但看起来它没有输出包含括号的任何行(是的,我逃脱了它们)。
leetbacoon

Answers:


0

我在对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。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.