ubuntuusers.de

Bash-Script search & replace

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

audax

Avatar von audax

Anmeldungsdatum:
15. September 2006

Beiträge: 1253

Konsenz:
CSV mit RegExp oder sonstwie per Hand parsen ist blöd. 😀

dusselmann

(Themenstarter)

Anmeldungsdatum:
6. Mai 2005

Beiträge: 1055

das alles steht ja nicht zur diskussion 😛

thema erledigt.

dusselmann

(Themenstarter)

Anmeldungsdatum:
6. Mai 2005

Beiträge: 1055

Ok, Script läuft noch nicht korrekt. Hier noch mal kurze Erläuterung: ich habe ein cvs-file, wo je zeile ein wort steht, was durch das 2. wort in dieser zeile ersetzt werden soll. mit dieser csv geh ich alle dateien in einem verzeichnis durch und ersetze das erste wort mit dem zweiten. was nicht funktioniert: in den wörtern sind entweder ein # oder ein . (punkt). diese werden jedoch nicht verglichen, sodass z.b. ein suchwort "#asdf" dazu führt, dass alle ergebnisse "asdf" ersetzt werden UND nach dem replace eine leerzeile eingefügt wird. befehl für das search'n'replace:

sed -i "s/$search/$replace/g" $filename

kompletter code:

while read LINE
do
  search=`echo $LINE | cut -d ";" -f1`
  replace=`echo $LINE | cut -d ";" -f2 | cut -d " " -f1`

  for i in $(find . -type f -name "$2" )
  do
    sed -i "s/$search/$replace/g" $i
  done
done < $1

Brauche dringend Unterstützung!!!

Vielen Dank & Gruß
Dussel

audax

Avatar von audax

Anmeldungsdatum:
15. September 2006

Beiträge: 1253

*hust*perl!*hust*

dusselmann

(Themenstarter)

Anmeldungsdatum:
6. Mai 2005

Beiträge: 1055

och menno - nö... es muss ja auch in einem bash-script möglich sein!

aber wenn es schneller geht in perl - immer her damit! stehe damit leider etwas unter zeitdruck... ☹

dusselmann

(Themenstarter)

Anmeldungsdatum:
6. Mai 2005

Beiträge: 1055

Thema ist jetzt endgültig abgehakt. Korrekt funktinoierendes Script:

echo -n "search and replace in progress. please wait "

while read LINE
do

  search=`echo $LINE | cut -d ";" -f1`
  rep=`echo $LINE | cut -d ";" -f2 | cut -d " " -f1`
  replace=${rep:0:(${#rep}-1)}
  echo -n .

  for i in $(find . -type f -name "$2" )
  do
    if [ "${search:0:1}" == "." ]
    then
      sed -i "s/class=\"${search:1}/class=\"${replace:1}/g" $i
    fi
    if [ "${search:0:1}" == "#" ]
    then
      sed -i "s/id=\"${search:1}/id=\"${replace:1}/g" $i
    fi
  done

done < $1

echo " "

jerik

Avatar von jerik

Anmeldungsdatum:
19. August 2006

Beiträge: 425

für sowas gibt es doch awk... und ruby wäre auch noch eine alternative 😉

Gruss – jerik

dusselmann

(Themenstarter)

Anmeldungsdatum:
6. Mai 2005

Beiträge: 1055

es funktioniert... 😉

Antworten |