ubuntuusers.de

Mit sed eckige Klammern löschen

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Speedy2007

Anmeldungsdatum:
7. Januar 2007

Beiträge: 35

Hallo zusammen,

ich möchte mit einem Shellscript aus einer eingelesenen Datei alle Elemente, die in der Form "Zahl in eckiger Klammer" vorliegen, also z.B. "[34]" herauslöschen. Dazu habe ich folgenden sed Basisbefehl:

sed 's/[0-9]// g'

Nun werden natürlich alle Ziffern gelöscht, aber ich habe es noch nicht geschafft auch die eckigen Klammern zu löschen (habs mit

sed 's/\[[0-9]\]// g'

versucht u.a. ... Naja, funktioniert hats leider noch nicht.

Könnt ihr mir vielleicht weiterhelfen, wie ich das richtig mache? Danke im voraus!

-Speedy

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

sed 's/\[[0-9]\]// g'

Das erste Muster war 'beliebige Ziffer', und durch das 'g' global, also beliebig oft. Das neue Muster ist eckige-Klammer-auf, beliebige Ziffer, eckige-Klammer-zu - das ganze beliebig oft.

echo "afoo [3][45]bar" | sed 's/\[[0-9]\]// g'
afoo [45]bar

logisch, oder?

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

sed -r s/\[[0-9]+\]//g

Vain

Avatar von Vain

Anmeldungsdatum:
12. April 2008

Beiträge: 2510

Hallo alleine 😉,

dir fehlt der "quantifier": So, wie du es jetzt hast, passt das nur auf genau eine Ziffer in eckigen Klammern. Du willst aber eigentlich "eine oder mehrere Ziffern" in eckigen Klammern treffen. Das hat vorher mit den Ziffern alleine nur geklappt, weil du hinten den g-modifier stehen hast, der eben jedes Auftreten löscht und das wird in deinem Fall zu "jedes Auftreten einer einzelnen Ziffer".

Also muss hinter die Klasse ein + (und der Parameter -r dazu, damit du das + nicht escapen musst):

sed -r 's/\[[0-9]+\]//g'

HTH

-edit: Wow. Ich sollte den Thread wohl noch öfter refreshen. 😛

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Was spricht dagegen, die "[]" einfach mit in die Auswahlgruppe zu setzen ?

Ok, man muss die "]" als erste in die Klammer schreiben damit das klappt, aber dann geht das sehr wohl:

track@ubuntu:~$ echo "afoo x[3][45]bar" | sed 's/[][0-9]//'
afoo x3][45]bar
track@ubuntu:~$ echo "afoo x[3][45]bar" | sed 's/[][0-9]//g'
afoo xbar

Im Gegensatz zu dem Vorschlag oben löscht das natürlich auch einsame Ziffern und Klammern.

track

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

track schrieb:

Was spricht dagegen, die "[]" einfach mit in die Auswahlgruppe zu setzen ?

Ich frage mich gerade, wieso Du das fragst, wenn Du den Grund wenige Zeilen später selbst nennst...

Antworten |