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
grep
spuckt das aus:
grep: invalid character range
Stattdessen möchte ich grep
Folgendes 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 grep
die 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.