Hier ist eine letzte PowerShell-Lösung, die sich mit neuen Linien befasst. Als Trennzeichen wird ein Hashtag gefolgt von Wortzeichen gefolgt von {EOL} angenommen. Bei einer Datenzeile ohne Hash-Tag wird davon ausgegangen, dass die Daten in der nächsten Zeile fortgesetzt werden. Die anderen Informationen unter diesem Abschnitt meiner Antwort befassen sich nicht mit dem vom Autor erwähnten Sonderfall, bei dem Daten eine Newline-Grenze überschreiten. In diesem Beispiel wird davon ausgegangen, dass die Datei test.txt heißt und sich im aktuellen Verzeichnis befindet.
[string[]]$fileContent = (get-content .\test.txt);
[string]$linebuffer = '';
[object]$fixedFile = foreach($line in $fileContent) {
if(-not ($line -match "#\w+$")) {
$linebuffer += ($line + ' ');
continue;
}
$linebuffer += $line;
$linebuffer;
$linebuffer = '';
}
($fixedFile -replace '^(.*)\ (#.*)$', '$2 $1' | Sort-Object) -replace '^(#\w+)\ (.*)$','$2 $1' | out-file test.txt -encoding ascii
Verwenden Sie gVim unter Windows oder MacVim unter OS X.
HINWEIS: Vim ist ein Editor mit 2 Modi. Einfüge- / Bearbeitungsmodus und Befehlsmodus. Um Text tatsächlich wie einen normalen Editor zu bearbeiten, müssen Sie sich im Bearbeitungsmodus befinden, der das Drücken einer Taste wie a
oder erfordert i
. Der Editor wird im Befehlsmodus gestartet. Im Befehlsmodus können Sie einfach einen Doppelpunkt eingeben, um diese Befehle einzugeben.
:%s/^\(.*\)\ \(\#\w\+\)$/\2\ \1/g
:sort
:%s/^\(\#\w\+\)\ \(.*\)$/\2\ \1/g
Der erste Befehl tauscht das Hashtag am Zeilenende gegen den Zeilenanfang aus. Der zweite Befehl sortiert die Daten und der dritte Befehl macht den Tausch rückgängig und verschiebt das Hashtag zurück an das Ende der Zeile.
Ich habe dies an Ihrer Probe getestet und es funktioniert.
@Oliver_Salzburg gab mit Excel in Kommentaren eine viel einfachere Antwort. Ich habe nicht über den Tellerrand hinaus gedacht und mit einem Texteditor geantwortet.
Schritt 1: Ersetzen #
durch ,#
Schritt 2: Als CSV in Excel oder eine ähnliche Anwendung importieren. - Oliver Salzburg ♦
Hier ist eine Lösung, die nur Powershell verwendet und von Haus aus unter Win7 ausgeführt werden kann. Ich hatte immer noch keine Gelegenheit, über durchlaufende Zeilenumbrüche nachzulesen, daher berücksichtigt diese Lösung diese nicht.
In diesem Beispiel wird davon ausgegangen, dass es sich bei der Datei, mit der Sie arbeiten, um handelt test.txt
.
$tempstor = (get-content test.txt) -replace '^(.*)\ (#.*)$', '$2 $1' | Sort-Object
$tempstor -replace '^(#\w+)\ (.*)$','$2 $1' | out-file test.txt -encoding ASCII
Ein Liner, Hebel Unterschalen.
((get-content test.txt) -replace '^(.*)\ (#\w+)$', '$2 $1' | Sort-Object) -replace '^(#\w+)\ (.*)$','$2 $1' | out-file test.txt -encoding ascii