sed gibt zu viel aus

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

sed gibt zu viel aus

Beitrag von Duff » 05.07.2007 14:57:55

Hallo,

eine Frage zu sed.

Ich habe eine Datei, in der die Zeilen alle ungefähr so aufgebaut sind.

[Abj0_2]weiterer Text ...
Text [Text_12] weitere Text...
...


Ich möchte nun mit sed den Inhalt der []-Klammern haben, oder sogar mit den []-Klammern.

Habe bisher folgendes versucht, aber es kommt immer die ganze Zeile zurück:

sed 's/^.*\(\[[a-zA-Z0-9_]+\]\).*$/\1/g'


Wo ist mein Denkfehler???
Oh, yeah!

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Beitrag von fuzzy » 05.07.2007 20:31:21

Hallo Duff,

ich habe hier ersmal selber probiert, da mir bei Deiner Version erstmal nix "böses" aufgefallen ist:

Code: Alles auswählen

fuzzy@deb:~$ cat test.txt
[Abj0_2]weiterer Text ...
Text [Text_12] weitere Text...

fuzzy@deb:~$ sed 's/^[^\[]*//;s/\].*/]/' test.txt
[Abj0_2]
[Text_12]

salto@deb-dose:~$ sed 's/^[^\[]*\(.*\]\).*/\1/' test.txt
[Abj0_2]
[Text_12]
...in einem nächsten Schritt könntest Du die Klammern entfernen bzw. anpassen um die Klammern "verschwinden zu lassen".
Wie allgemeingültig meine Lösung ist, kann ich Dir leider nicht sagen und es geht bestimmt eleganter... :wink:

Gruß fuzzy

fuzzy
Beiträge: 1021
Registriert: 04.10.2003 12:15:52

Re: sed gibt zu viel aus

Beitrag von fuzzy » 06.07.2007 06:29:30

Hallo Duff,
Duff hat geschrieben: sed 's/^.*\(\[[a-zA-Z0-9_]+\]\).*$/\1/g'
sed 's/^.*\(\[[a-zA-Z0-9_]*\]\).*$/\1/g'
a* beschreibt die Häufigkeit von a. Der Ausdruck kann keinmal oder beliebig oft vorkommen.
a+ Der reguläre Ausdruck a muß mindestens einmal, kann aber beliebig oft vorkommen.

Ich denke an der Stelle ist "*" das was Du für Deinen Fall möchtest, da nicht immer alle [a-zA-Z0-9_]-Zeichen in der Klammer stehen.

Gruß fuzzy

Benutzeravatar
Duff
Beiträge: 6321
Registriert: 22.03.2005 14:36:03
Wohnort: /home/duff

Beitrag von Duff » 06.07.2007 07:37:08

Danke.

Ich habe mich für ein + entschieden, da ich davon ausgegangen bin, dass mindestens ein Zeichen aus der Zeichenklasse vorkommen soll.
Oh, yeah!

Antworten