Suchen Sie nach einem regulären Ausdruck, um eine Liste mit durch Kommas getrennten Werten zu bearbeiten

7

Ich habe eine Zeile mit 3 langen Zahlen, die durch Komma getrennt sind. Was ich tun möchte, ist, die Zahl in der Mitte zu löschen und nur die erste Zahl und die letzte Zahl durch ein Komma getrennt zu lassen.

Zur Zeit:

123456789123,723456789123456,834567885544334
123456789125,723456789123457,834567885544333
123456789126,723456789123458,834567885544337

Erwünschtes Ergebnis:

123456789123,834567885544334
123456789125,834567885544333
123456789126,834567885544337

Ich habe es versucht, aber es hat mit diesen regulären Ausdrücken nicht funktioniert:

  • regulärer Ausdruck, um Zeichenfolge zu finden: %[0-9]+,[0-9]+,[0-9]+
  • regulärer Ausdruck zum Ersetzen der Zeichenfolge: ^1,^2

Welcher reguläre Ausdruck macht eigentlich das, was ich erreichen möchte?

Hinweis - Ich verwende derzeit eine Anwendung namens Ultraedit, die unter Windows 7 ausgeführt wird. Wenn Sie eine bessere Textbearbeitungsanwendung für Windows empfehlen, die mein Problem lösen kann, lassen Sie es mich bitte wissen.

user836026
quelle
Ich habe Ihre Frage bearbeitet. Wenn Sie mit den Änderungen unzufrieden sind, können Sie sie jederzeit zurücksetzen oder erneut bearbeiten.
Baarn

Antworten:

10

Sie können einfach die mittlere Nummer jeder Zeile durch nichts ersetzen.

Im Editor

Das heißt, in Ihrem Editor können Sie den regulären Ausdruck suchen und ersetzen

,[0-9]+,

(die nur mit Kommas auf beiden Seiten übereinstimmt, was für Ihre Eingabe nur die mittlere Zahl ist) mit einem einzelnen Komma:

,

Ich gehe davon aus, dass Ultraedit reguläres Suchen und Ersetzen unterstützt. Wenn nicht, versuchen Sie es mit Notepad ++, was ich weiß.

Von der Kommandozeile

Da Sie Ihr Frage- Tags versehen haben, erfahren Sie hier, wie Sie dies über die Befehlszeile tun.

sed

Verwenden Sie sedeinen Standard-Linux-Befehl, der auch für Windows als Teil von Cygwin oder GnuWin32 verfügbar ist:

C:\>sed -e 's/,[0-9]+,/,/g' filename.txt

Power Shell

Jens wies darauf hin, dass dies auch in Windows PowerShell möglich ist. siehe diese Erklärung .

Mechanische Schnecke
quelle
1
Es würde nicht funktionieren, wenn Sie den mittleren Unterausdruck durch eine leere Zeichenfolge ersetzen. Sie können es jedoch durch ein einzelnes Komma ersetzen, um den gewünschten Effekt zu erzielen.
Adeel Zafar Soomro
Ups, das war dumm von mir. Fest.
Mechanische Schnecke
3
Ohne Cygwin könnten Sie die PowerShell verwenden: blogs.technet.com/b/heyscriptingguy/archive/2008/01/17/…
Jens
3

Die Regex-Syntax variiert von Anwendung zu Anwendung. Ich bin mit Ultredit nicht vertraut und werde eine allgemeine Antwort geben

In Ihrer Regex fehlen Klammern

([0-9] +), [0-9] +, ([0-9] +)

RedGrittyBrick
quelle
2

Um Text zu ersetzen, muss der richtige Unterausdruck in Klammern angegeben werden.

In UltraEdit müssen Sie nach dem folgenden regulären Ausdruck suchen:

 %^([0-9]+^),[0-9]+,^([0-9]+^)
Adeel Zafar Soomro
quelle
2

Awk Äquivalent!

echo "$Variable" | awk 'FS="," { print $1","$3 } '

Brandon Kreisel
quelle