
Ich habe Adresszeichenfolgen, die (aufgrund schlechter anfänglicher Programmierung) viel zu viel Freitexteingabe erlaubten. Beim Aufräumen dieses geerbten Durcheinanders ist mir aufgefallen, dass am Ende der Adressfelder häufig (und häufig auch nicht) Kommas stehen, die ich loswerden möchte.
Das Problem besteht (wiederum häufig!) darin, dass diejenigen, die die Daten eingeben (und pro Zeile bezahlt werden...), Zeichenfolgen wie die folgenden eingeben:
`address_1_string , `
Das ist address_1_string, gefolgt von zwei Leerzeichen, gefolgt von dem Komma, das ich löschen möchte, gefolgt von zwei weiteren Leerzeichen. Die Anzahl der Leerzeichen (entweder vor oder nach dem Komma) ist beliebig und liegt normalerweise zwischen 0 und 5. Das Problem wird noch dadurch verschärft, dass address_string_1
es selbst interne (gültige) Kommas enthalten kann.
Ich suche also nach einem regulären Ausdruck, der bis zum Zeilenende geht, alle nachstehenden Leerzeichen, das erste Komma und dann alle weiteren Leerzeichen löscht, bis ein gültiges Zeichen [a-zA-Z0-9] ([:alphanum:]?) gefunden wird.
Ich habe Ahnung von regulären Ausdrücken, aber das geht über meine Gehaltsstufe hinaus. Dies ist mein erster Beitrag auf Stackexchange. Wenn ich also am falschen Ort bin, leiten Sie mich bitte weiter. Danke.
Antwort1
< input sed 's/[[:space:],]*$//' > output
Würde alle Leerzeichen und Kommazeichen am Ende der Zeile löschen.
Um die Datei direkt zu bearbeiten, sed
verfügen einige Implementierungen über eine -i
Option, die von perl
der -i
Option inspiriert ist:
sed -i 's/[[:space:],]*$//' input-and-output # GNU, busybox, NetBSD, OpenBSD
sed -i '' 's/[[:space:],]*$//' input-and-output # FreeBSD, macOS