
Ich möchte die Auswahl von Daten aus einer PDF-Datei zur späteren Verarbeitung in einer Tabelle automatisieren. 1: Kopieren Sie den gesamten Text mit Notepad in eine TXT-Datei – ok. 2: Entfernen Sie alle Zeilenumbrüche und CRLF, um mit Powershell eine einzeilige Datei zu erstellen – ok
3: Sed-Bearbeitungen zum Ausschneiden unerwünschten Textes funktionieren nicht (ich habe Sed 2 Jahre lang erfolgreich verwendet).
Powershell -Befehl ""$(Get-Content T1.txt)" > t2.txt"
sed -i -r "s/Limited/XX/g" t2.txt – funktioniert nicht.
Wenn Sie jedoch alle Zeilenumbrüche manuell mit Notepad++ (mit dem regulären Ausdruck \r\n) entfernen, um die TXT-Datei zu erstellen, funktioniert der gleiche sed-Befehl einwandfrei. Irgendwelche Ideen? Vielleicht eine Alternative zum Entfernen aller Zeilenumbrüche in einer .bat-Datei? Ich verwende Win7 Prof 64-Bit.
Antwort1
sed
ist ein POSIX-Tool, das für die Textverarbeitung entwickelt wurde. Möglicherweise ist Ihre "Einzelzeilendatei" keinTextdatei im Sinne von POSIX:
Eine Datei, die Zeichen enthält, die in null oder mehr Zeilen organisiert sind. Die Zeilen enthalten keine NUL-Zeichen und keine dürfen eine
{LINE_MAX}
Länge von Bytes überschreiten, einschließlich des <newline>-Zeichens. […] viele Dienstprogramme erzeugen nur dann vorhersehbare oder sinnvolle Ausgaben, wenn sie mit Textdateien arbeiten.
Sofern es nicht leer ist, enthält es eineunvollständige Zeilenur:
Eine Folge von einem oder mehreren Zeichen, die keine <newline>-Zeichen sind, am Ende der Datei.
Vergleichen Sie mit der Definition vonLinie:
Eine Folge von null oder mehr Nicht-<newline>-Zeichen plus einem abschließenden <newline>-Zeichen.
LF
ist das <Newline>-Zeichen ( CR
ist nicht; ist in diesem Kontext CR
nichts Besonderes).
Ich kenne Powershell nicht und kann nicht beurteilen, ob Ihr Code vernünftig ist, aber wenn er alle Zeilenumbrüche entfernt, wird wahrscheinlich eine unvollständige Zeile erstellt. Ich vermute, Notepad++ ist intelligent genug, um die Zeile trotzdem zu vervollständigen.
Einige Implementierungen von sed
verarbeiten unvollständige Zeilen nicht (Beispiel) und manche tun es (zumindest GNU sed
). Bei Ihrem sed
ist es offensichtlich nicht so. Finden Sie heraus, sed
was es tut, oder stellen Sie sicher, dass die „einzelne Zeile“ richtig durch ein <newline>-Zeichen abgeschlossen wird. Beispielsweise in Unix dieser Befehl:
echo >> T1.txt
hängt genau ein <newline>-Zeichen an T1.txt
. Ich kenne keine Powershell-Methode, tut mir leid.
Beachten Sie , dass es sich formal immer noch nicht um eine Textdatei handelt, wenn die Korrektur die Anzahl der Bytes in einer einzelnen Zeile T1.txt
überschreitet . Textverarbeitungsprogramme funktionieren daher möglicherweise immer noch nicht damit. Mein Punkt ist, dass Sie möglicherweise eine Zeilenlängenbeschränkung haben und es daher in einigen Fällen möglicherweise nicht funktioniert, selbst nachdem Sie die Datei durch Hinzufügen eines abschließenden <newline>-Zeichens korrigiert haben.{LINE_MAX}
sed
Sehendiese Antwortum eine Idee für eine Problemumgehung zu bekommen.