Löschen Sie die ersten fünf Zeichen in einer beliebigen Zeile einer Textdatei unter Linux mit sed

73

Ich benötige einen Einzeiler, um die ersten fünf Zeichen in einer Zeile einer Textdatei zu entfernen. Wie kann ich das mit sed machen?

JBeg
quelle
ähnliche Frage stackoverflow.com/questions/971879/…
dogbane

Antworten:

80
sed 's/^.....//'

meint

Ersetzen Sie ("s", ersetzen Sie) den Zeilenanfang und dann 5 Zeichen (".") durch nichts .

Es gibt kompaktere oder flexiblere Möglichkeiten, dies mit sed oder cut zu schreiben.

Phil
quelle
Wie würden Sie dies für das letzte Zeichen einer Zeichenfolge tun?
Blarg
3
@ Blarg versuchensed 's/.$//'
Rodrigo
plus 1 für die Beantwortung des Teils 'mit sed' der Frage und die anschließende Erwähnung, dass dies cutbesser ist
sg
136

Verwendung cut:

cut -c6-

Dies druckt jede Zeile der Eingabe ab Spalte 6 (die erste Spalte ist 1).

Greg Hewgill
quelle
1
Hier hat cut eine bessere Leistung als sed, aber ich habe Probleme bei der Verwendung von utf-8-codierten Zeichen.
PSchwede
Um den Kommentar von @ PSchwede näher zu erläutern, cutbehandelt GNU alle Zeichen als Bytes, auch wenn Sie die -cOption verwenden. GNU cutunterstützt keine Multi-Byte-Zeichen und wird auf absehbare Zeit wahrscheinlich keine Multi-Byte-Zeichen unterstützen
Harold Fischer
15
sed 's/^.\{,5\}//' file.dat
Ignacio Vazquez-Abrams
quelle
4
BSD sed akzeptiert nicht die höchstens gebundene ( {,5}), dies ist GNU-spezifisch. Ein Ausdruck, der auf beiden funktioniert, wäresed 's/^.\{5\}//' file.dat
Tristan
10
awk '{print substr($0,6)}' file
Ghostdog74
quelle
0

sed 's/^.\{,5\}//' file.dat arbeitete wie ein Zauber für mich

Gopi
quelle