# [gelöst]bash-skript <-> sed

## Christian99

Hallo,

ich habe grad ein bash-skript geschrieben, welches mir in einem Satz von header dateien von OgreBullet die "#include" Anweisungen anpassen soll. wenn ich das bash-skript laufen lasse, dann werden die passenden sed-befehle erzeugt und ausgeführt. Allerdings werden die Dateien nicht geändert, der Inhalt liegt unverändert vor. Nur das Dateidatum wird aktualisiert. (Bei sed -i). Wenn ich mir die Befehle jedoch mit "echo" ausgeben lasse, und dann nochmal so wie sie dastehen eingebe (copy&paste), dann funktionieren sie auch.

Frage: Muss man da bei sed noch was beachten, wenn man es von einem bash-skript aus aufruft?

zum Beispiel soll 

```
#include "OgreBulletCollisionsPreRequisites.h"
```

 zu 

```
#include <OgreBullet/Collision/OgreBulletCollisionsPreRequisites.h>
```

 werden.

das skript:

```

#!/bin/bash

FILES=( $(find -name *.h) )

#echo $FILES

n=0

for i in ${FILES[@]}; do

        OLD_INCLUDES[ ${n} ]="\"$( echo ${i} | sed 's!./Dynamics/!!' | sed 's!./Collisions/!!' )\""

        NEW_INCLUDES[ ${n} ]="<OgreBullet$( echo ${i} | sed 's!./!/!' )>"

        n=$(( $n + 1 ))

done

if [[ ${#OLD_INCLUDES[@]} != ${#NEW_INCLUDES[@]} ]]; then

        echo "FEHLER!!"

        exit

fi

for i in ${FILES[@]}; do

        echo $i

        for j in $( seq 0 $(( ${#OLD_INCLUDES[@]} -1 )) ); do

                #echo $j

                echo "sed 's!${OLD_INCLUDES[$j]}!${NEW_INCLUDES[$j]}!g' \"${i}\""

                sed 's!${OLD_INCLUDES[$j]}!${NEW_INCLUDES[$j]}!g' "${i}"

                #sed -i 's!${OLD_INCLUDES[$j]}!${NEW_INCLUDES[$j]}!g' "${i}"

        done

done

```

danke für eure Hilfe!

ChristianLast edited by Christian99 on Sat Aug 28, 2010 10:30 am; edited 1 time in total

----------

## mv

man quote: Beim echo quotest Du mit "...", bei sed mit '...'. Im ersten Fall werden Variablen ersetzt, im zweiten nicht. Zum Debuggen gibt es übrigens "set -x".

----------

## Christian99

Oh mann, ja. Ich hab das zwar scho gelesen, aber dachte das betrifft mich nicht. Weil wenn ich den ganzen Befehl mit echo ausgebebe, dann hats ja gepasst. da haben aber die äußeren "" die inneren '' gecancelt. da hab ich auf der Leitung gestanden...

Und das mit dem set -x ist auch gut. Muss ich mir mal merken.

Schönen Dank

Christian

----------

