Sostituzioni ricorsive di regexp
Da Slacky.eu.
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.
Download
http://www.slacky.eu/misto/concorso/g4b0/subst.sh
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