Wie kann ich Leerzeichen in sed zuordnen? In meinen Daten möchte ich alle 3+ nachfolgenden Leerzeichen (Tabulator) abgleichen und durch 2 Leerzeichen ersetzen. Wie geht das?
Wie kann ich Leerzeichen in sed zuordnen? In meinen Daten möchte ich alle 3+ nachfolgenden Leerzeichen (Tabulator) abgleichen und durch 2 Leerzeichen ersetzen. Wie geht das?
Antworten:
Die Zeichenklasse entspricht \s
den Leerzeichen <tab>
und <space>
.
Zum Beispiel:
$ sed -e "s/\s\{3,\}/ /g" inputFile
ersetzt jede Folge von mindestens 3 Leerzeichen durch zwei Leerzeichen.
HINWEIS : Um die POSIX-Kompatibilität zu gewährleisten , verwenden Sie [[:space:]]
stattdessen die Zeichenklasse \s
, da letztere eine GNU sed-Erweiterung ist. Siehe die POSIX-Spezifikationen für sed und BREs
sed
ich [[:space:]]
da \s
nichts anfangen. Vielleicht \s
ist eine GNU sed Erweiterung?
[[:space:]
könnte man verwenden, [[:blank:]]
was nur horizontale Tabulatoren und Leerzeichen (aber keine Zeilenumbrüche, vertikalen Tabulatoren usw.) zusammenbringt.
Dies funktioniert unter MacOS 10.8:
sed -E "s/[[:space:]]+/ /g"
sed "s/[[:space:]]\+/ /g"
ein oder mehrere Leerzeichen abgleichen.
-E
Flagge ebenfalls.
Einige ältere Versionen von sed erkennen \ s möglicherweise nicht als Leerzeichen-Matching-Token. In diesem Fall können Sie eine Folge von Leerzeichen und Tabulatoren mit '[XZ] [XZ] *' abgleichen, wobei X ein Leerzeichen und Z ein Tabulator ist.
sed 's/[ \t]*/"space or tab"/'
sed
Systems? Wenn nicht, ist es möglicherweise erwähnenswert, wo dies in ähnlicher Weise funktioniert wie in den anderen Antworten, nur damit wir die Einschränkungen kennen und wo dies möglicherweise nicht das beabsichtigte Ergebnis hat.