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 操作。

相關內容