# text datei mit konsolen porgrammen veraendert anzeigen

## pieter_parker

ich habe eine text datei, der inhalt sie in etwa so aus

```

(lala)  ;  (dudelidu)  ;  (lahlah)

(blub)  ;  (blob)  ;  (blubber)

(dum)  ;  (di)  ;  (dum)

```

... usw

ich will jetzt z.b.

cat datei.txt | grep blub

sagen, aber es soll dann so angezeigt werden 

```

blub

blob

blubber

```

wie kriege ich die rundeklammerauf und rundeklammerzu weg ?

wie kriege ich die zwei leerzeichen vor und nach dem ; weg und dafuer einen absatz hin ?

----------

## Necoro

```
grep blub test | sed -e "s/  ;  /\n/g" | sed -e  "s/(\(.*\))/\1/"
```

wenn man dem sed für den zweiten ausdruck sagen könnte, nicht greedy zu sein, könnte man das in einen sed aufruf packen  :Smile: 

----------

## Fabiolla

Und noch eine Variante ohne sed...

```

grep "blub" testfile | tr -d "(\|)\|[:blank:]" | tr ";" "\n"

```

----------

## Necoro

 *Fabiolla wrote:*   

> Und noch eine Variante ohne sed...
> 
> ```
> 
> grep "blub" testfile | tr -d "(\|)\|[:blank:]" | tr ";" "\n"
> ...

 

die geht aber nur, wenn in den wörtern in den klammern keine leerzeichen auftreten  :Smile:  (ansonsten werden diese leerzeichen auch gelöscht)

/edit:

denkbar wäre auch noch:

```
grep blub test | tr -d "[()]" | sed -e "s/  ;  /\n/g"
```

das verzichtet auf den relativ unübersichtlichen zweiten sed call  :Smile: 

----------

## Fabiolla

@Necoro

Hast natürlich recht mit den Leerzeichen in den Klammern, 

hab dafür eine Varianten mit einem Sed-Aufruf  :Smile: 

```

grep "blub" testfile | sed -e 's/)[ ]*\|[ ]*(//g; s/;/\n/g'

```

----------

## Necoro

Weil mir langweilig war:

```
gawk 'BEGIN { FS="  ;  "; OFS="\n"; } /blub/ { gsub(/\(/, ""); gsub(/\)/, ""); for (i = 1; i <= NF; i++) print $i; }' test
```

Beachte: ... der Suchausdruck steht in der Mitte  :Smile:  (/blub/) ... wenn man eine Variable haben will:

```
gawk -v pat=blub 'BEGIN { FS="  ;  "; OFS="\n"; } $0 ~ pat { gsub(/\(/, ""); gsub(/\)/, ""); for (i = 1; i <= NF; i++) print $i; }' test
```

Alternativ mit einem grep und irgendwie mehr ... hackery:

```
grep "blub" test | gawk 'BEGIN { RS="  ;  "; FS="\n" } { gsub(/\(/, ""); gsub(/\)/, ""); print $1; }'
```

----------

## Necoro

 *Fabiolla wrote:*   

> @Necoro
> 
> Hast natürlich recht mit den Leerzeichen in den Klammern, 
> 
> hab dafür eine Varianten mit einem Sed-Aufruf 
> ...

 

Und hier nochmal mit komplett nur einem sed  :Smile: 

```
sed -e '/blub/ { s/)[ ]*\|[ ]*(//g; s/;/\n/g; p }; d' test
```

----------

## think4urs11

 *Necoro wrote:*   

> 
> 
> ```
> grep blub test | sed -e "s/  ;  /\n/g" | sed -e  "s/(\(.*\))/\1/"
> ```
> ...

 

Du lernst es langsam  :Wink: 

aber wie wäre es mit folgender schlichter Variante: 

```
sed -e '/blub/!d;s/[()]//g;s/  ;  /\n/g' test.txt
```

----------

## Necoro

Argh ... die Funktion des "!" hab ich gesucht  :Smile:  - aber sie steht natürlich nicht in der normalen Auflistungen der sed-Adressen ... sondern im Fließtext da drunter (den ich gestern nicht gelesen hab) ... und wieder was gelernt  :Smile: 

----------

