Hallo,
ich möchte Zeilennummern von Listings entfernen und da ich schon immer mal RegEx etwas verstehen wollte und sed dafür geeignet erschien, schien die Gelegenheit günstig. Leider funktionieren viele Varianten nicht, die nach meinem Verständnis aber funktionieren sollten.
Könnt ihr mir auf die Sprünge helfen, wo das Problem liegt?

Auszug aus der zu bearbeitenden Datei.
Code:
2:  /* zugreifen. */
3:
57: int main(void)
Mein Skript sed1.sh mit verschiedenen ausprobierten Varianten sieht so aus:

Code:
# folgendes funktioniert

# sed 's/\w*://' $1 >b.txt
# sed 's/[0-9:]*//' $1 >b.txt
# sed 's/.*://' $1 >b.txt

# entfernt nur 2-stellige Zeilennummern

# sed '/^[0-9]*:/ s/..://g' $1 >b.txt

folgendes funktioniert nicht:

# sed 's/[0-9]{1,2}://' $1 >b.txt
# sed 's/[0-9]{1,2}://' $1 >b.txt
# sed 's/[.]{0,2}://' $1 >b.txt
# sed 's/[0-9:]+//' $1 >b.txt    # funktioniert, wenn + durch * ersetzt wird
# sed 's/*//' $1 >b.txt
#  sed 's/...//' $1 >b.txt       # schlaegt bei kuerzeren Zeilen fehl

Mich irritiert besonders, dass die Variante sed 's/[0-9:]+//' $1 >b.txt nicht funktioniert, da es mit * statt + geht.


Ich habe bei meinen Versuchen ausgenutzt, dass die Zeilennummern mit einem Doppelpunkt enden. Wie würde man es anstellen, wenn man aus jeder Zeile eine bestimmte Anzahl von Zeichen am Anfang jeder Zeile entfernen möchte und bei Zeilen, die weniger Zeichen enthalten, alle Zeichen entfernen möchte?
In meinem Fall wären das z.B. 3 Zeichen, sofern vorhanden.