Sostituzioni ricorsive di regexp
Da Slacky.eu.
Versione del 21 ott 2007 alle 17:26 di Slacky (Discussione | contributi)
Descrizione
Script che sostituisce _ricorsivamente_ tutte le occorrenze della regexp passata come primo parametro con la regexp passata come secondo parametro, a partire dalla dir attuale o da quella specificata come terzo parametro.
Script
#!/bin/sh # # Script che sostituisce _ricorsivamente_ tutte le occorrenze della regexp passata come # primo parametro con la regexp passata come secondo parametro, a partire # dalla dir attuale o da quella specificata come terzo parametro # # developer: g4b0 aka Gabriele Brosulo # gabriele [dot] brosulo [at] gmail [dot] com # # esempio di utilizzo: # # g4b0@slack:~/sys/script/test$ tree . # . # |-- 1.txt # |-- 2.txt # `-- test2 # `-- 3.txt # # 1 directory, 3 files # g4b0@slack:~/sys/script/test$ more 1.txt # pippo # pippa # pappo # pluto # # g4b0@slack:~/sys/script/test$ more 2.txt # pippo # pippa # pappo # pluto # # g4b0@slack:~/sys/script/test$ more test2/3.txt # pippo # pippa # pappo # pluto # # g4b0@slack:~/sys/script/test$ cd .. # g4b0@slack:~/sys/script$ ./subst.sh p.ppo pappa test # # # ****************************** # # Ora sono in: /home/g4b0/sys/script # # Num par: 3 # Comando: ./subst.sh # Old regexp: p.ppo # New Regexp: pappa # Dir: test # # ****************************** # # Continue? (yes/no) # yes # # # # Num par: 3 # ./subst.sh # p.ppo # pappa # test # # directory root: test # # Processo il file: 1.txt # Processo il file: 2.txt # # ************* # Entro dentro a: test/test2 # ************* # Num par: 3 # ./subst.sh # p.ppo # pappa # test2 # # directory root: test2 # # ./subst.sh: line 28: cd: test2: No such file or directory # Processo il file: 3.txt # # ************* # Esco da a: test2/3.txt # ************* # g4b0@slack:~/sys/script$ cd test # g4b0@slack:~/sys/script/test$ more 1.txt # pappa # pippa # pappa # pluto # # g4b0@slack:~/sys/script/test$ more 2.txt # pappa # pippa # pappa # pluto # # g4b0@slack:~/sys/script/test$ more test2/3.txt # pappa # pippa # pappa # pluto # # g4b0@slack:~/sys/script/test$ EXIT_SUCCESS=0 EXIT_FAILURE=1 function usage () { echo "usage: ($basename $0) <old regexp> <new regexp> [ start directory ] " exit $EXIT_FAILURE } function chstr_ric () { echo -e "Num par: $#\n$0\n$1\n$2\n$3\n" # se non è specificata la dir di partenza parto da quella attuale if [ -z "$3" ]; then DIR=$PWD else DIR=$3 fi # Entro nella dir echo -e "directory root: $DIR\n" cd $DIR for FILE in * ; do if [ -d $FILE ] ; then echo -e "\n*************\nEntro dentro a: $DIR/$FILE\n*************" # Se è una dir ci entro dentro e chiamo la ricorsione cd $FILE chstr_ric "$1" "$2" "$FILE" echo -e "\n*************\nEsco da a: $DIR/$FILE\n*************" # finita la ricorsione risalgo nell'albero delle directory cd .. else echo -e "\tProcesso il file: $FILE" # se è un file attuo la sostituzione sed -e "s/$1/$2/g" $FILE > $FILE.newsed mv -f $FILE.newsed $FILE fi done } # Se il numero di argomenti non è corretto esco e scrivo l'utilizzo if [ $# -eq 0 -o $# -gt 3 ]; then usage fi echo -e "\n\n****************************** \n Ora sono in: $PWD \nNum par: $#\nComando: $0\nOld regexp: $1\nNew Regexp: $2\nDir: $3 \n******************************" echo -e "\nContinue? (yes/no)" # exit 0 read SURE if [ $SURE != "yes" ]; then echo -e "Aborting..." exit $EXIT_FAILURE fi echo -e "\n\n" chstr_ric "$1" "$2" "$3" exit $EXIT_SUCCESS
- Data: 21/10/2007
- Autore: g4b0