Repository 32bit  Forum
Repository 64bit  Wiki

Sostituzioni ricorsive di regexp

Da Slacky.eu.
Versione delle 16:31, 21 ott 2007, autore: Slacky (Discussione | contributi)

(diff) ← Versione meno recente | Versione attuale (diff) | Versione più recente → (diff)

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
Strumenti personali
Namespace

Varianti