grep -Ef meldet „ungültiger Zeichenbereich“. Nochmal

grep -Ef meldet „ungültiger Zeichenbereich“. Nochmal

Dies ist eine Fortsetzung zudiese FrageDie Unterschiede sind unten aufgeführt.

Hier ist ein Auszug aus dem Inhalt von foo.txt (es ist riesig):

^.{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$

Und hier ist ein Auszug aus dem Inhalt von bar.txt (ebenfalls riesig):

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

Und hier ist der Befehl, den ich ausführe:

grep -Ef foo.txt bar.txt

grepspuckt das aus:

grep: invalid character range

Stattdessen möchte ich grepFolgendes ausgeben:

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

Was mache ich falsch? Was muss ich ändern, damit grepdie Ausgabe das ist, was ich brauche?

Mac OS X Yosemite, Bash 3.2.57(1)-Version

Antwort1

Aus den Kommentaren zum OP schließe ich, dass Sie möchten, dass die Klammerzeichen „[“ und „]“ in foo.txt mit den entsprechenden wörtlichen Klammerzeichen in bar.txt übereinstimmen. Vorausgesetzt, das ist richtig, müssen sie (nur) in foo.txt mit einem Backslash maskiert werden.

Eine Möglichkeit, diese Änderung en masse vorzunehmen, ist sed:

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

Sie erhalten dann eine geänderte foo.txt und die Originaldatei als foo.txt.bak.

Wenn meine Schlussfolgerungen nicht korrekt sind, bearbeiten Sie Ihren Beitrag bitte, um bestimmte Zeilen einzuschließen, die für Sie nicht funktionieren. Die Zeilen, die Sie oben posten, führen bei mir das Grep-Verfahren korrekt aus, sobald dieser Sed-Befehl auf foo.txt angewendet wird.

verwandte Informationen