2017-09-04 2 views
1

ich eine Textdatei, die wie folgt aussieht:Regex löschen bestimmte Räume mit sed

HETATM11584 
HETATM 2514 
HETATM22222 
HETATM 8585 
HETATM 1213 
HETATM62626 
HETATM 6754 

Es gibt weißen Räume trennen HETATM aus einer Reihe von Zahlen. Ich möchte Thesen löschen weißen Flächen und Ausgabe eine neue Datei, die wie folgt aussieht:

HETATM11584 
HETATM2514 
HETATM22222 
HETATM8585 
HETATM1213 
HETATM62626 
HETATM6754 

Ich habe versucht, sed verwenden

sed 's/.*HETATM [1-9]*.*/.*HETATM[1-9]*.*/' HETATM.txt > teste.txt 

Aber die Ausgabe sieht wie folgt aus:

HETATM11584 
.*HETATM[1-9]*.* 
HETATM22222 
.*HETATM[1-9]*.* 
.*HETATM[1-9]*.* 
HETATM62626 
.*HETATM[1-9]*.* 

Was ist der richtige sed Synthax für diese Operation?

Antwort

1

Sie sollten kein Muster als Ersatzzeichenfolge verwenden. Sie können den Raum aus dem String entfernen backreference mit:

sed 's/\(HETATM\) \([0-9]\)/\1\2/' HETATM.txt > teste.txt 

HETATM und Ziffern sind mit Klammern festgehalten. Erfasste Strings werden (ohne Leerzeichen) mit \1 und \2 ausgegeben.

2

Wenn die ganze Datei wie Ihr Beispiel ist, wäre der einfachste Weg, alle Räume zu entfernen werden:

$ sed -r 's/ //g' file.txt 
HETATM11584 
HETATM2514 
HETATM22222 
HETATM8585 
HETATM1213 
HETATM62626 
HETATM6754 

Wenn die Datei von was auch immer durch Leerzeichen folgt zusammensetzt (n) und einem mit einer Zahl enden, dann wird dies tun:

$ sed -r 's/ +([0-9]+)$/\1/g' file.txt 
HETATM11584 
HETATM2514 
HETATM22222 
HETATM8585 
HETATM1213 
HETATM62626 
HETATM6754 
0

Müssen Sie sed verwenden?

$ tr -d ' ' <HETATM.txt> teste.txt 

könnte auch Ihrem Zweck dienen.