Ich bin festgefahren, reguläre Ausdrücke mit einem sed-Befehl einzuschließen.
F: Ich möchte alle Vorkommen von zwei Leerzeichen nach dem Ende eines Satzes durch nur ein Leerzeichen ersetzen .
Folgendes habe ich getan:
sed 's/^ $/^$/' file
Und es hat nicht zwei Leerzeichen durch ein Leerzeichen nach dem Ende des Satzes ersetzt.
Ausgabe bekomme ich:
This is the output. Hello Hello
Ausgabe, die ich möchte:
This is the output. Hello Hello
text-processing
sed
Zeus
quelle
quelle
Antworten:
Ersetzen Sie den Punkt gefolgt von zwei oder mehr Leerzeichen durch einen Punkt, gefolgt von einem einzelnen Leerzeichen.
quelle
sed -r 's/\.\s+/. /g' file
mit GNU sed ...sed -E
eher alssed -r
. Das funktioniert mit GNU sed und * BSD sed (inkl. Mac OS X) und einigen anderen. Es ist geplant, "sehr bald" standardmäßig in POSIX aufgenommen zu werden.sed -E
jemandem auf dieser Site vorgeschlagen habe, der nicht funktioniert hat, abersed -r
funktioniert hat. Ich habe mit GNU sed alleine gearbeitet, daher keine Ahnung von POSIX und anderen Variationen. Ich werde versuchen, dieses Detail in Zukunft aufzunehmen , danke :)-E
seit einiger Zeit unterstützt (seit mindestens 2011, aber die Mann- und Infoseiten erwähnen immer noch nur-r
)Ihr
sed
Befehl's/^ $/^$/'
wird nicht tun, was Sie wollen. Es werden nur alle Zeilen ersetzt, die ein Leerzeichen enthalten, durch ein Zeilen enthalten^$
.Abhängig davon, welche Zeichen das Ende des Satzes markieren, können Sie Folgendes tun:
Dies wird ersetzen 2 oder mehr Räume nach
.
,?
oder!
mit einem Raum nur.quelle
sed -r 's/([.?!])\s+/\1 /g' file
sed
Bearbeitungsskript ersetzt jede Zeile, die ein einzelnes Leerzeichen enthält, durch die Literalzeichenfolge^$
.Dies ist, was Sie suchen könnten,
Stichprobe,
Verwenden von
sed
,quelle