Cerca i reemplaça text en fitxers

1a alternativa: Per cercar i reemplaçar en varis fitxers recursivament amb la comanda sed (NOTA: només canvia la primera aparició de pepito a cada línea, si en hi ha varis a cada línea cal executar la comanda vàries vegades):

find ./ -type f -exec sed -i ’s/pepito/pepita/’ {} \;

2a alternativa: S'ha de fer un script de la shell per poder processar varis fitxers amb la comanda sed. El següent script canvia totes les paraules “pepito” per “pepita”. Els fitxers canviats tenen extensió .new

#!/bin/sh
for FILE in `grep -r -s -l "pepito" *` ; do
 sed s/pepito/pepita/g $FILE > $FILE.new
done

Quan hagis comprovat que els fitxers canviats amb extensió .new estan bé, executes el següent pq canvïi els fitxer .new pels originals.

#!/bin/sh
for FILE in `grep -r -s -l "pepito" *` ; do
 sed s/pepito/pepita/g $FILE > $FILE.new
 mv $FILE.new $FILE
done

Si ho vols fer automáticament amb un script de la shell pràctic d'usar, aquí el tens:

#!/bin/sh 
#
#Aquest programa canvia tots els textos <old_text> pel text <new_text> en tots els fitxers

if [ $# != 2 ]; then #Hi ha mes o menys de dos parametres
  echo "$0 <old_text> <new_text>"
  echo "Aquest programa canvia tots els textos <old_text> pel text <new_text> en tots els fitxers"
  echo "Els fitxers originals es conserven reanomenats amb extensió .bak"
  exit 1
fi

for FILE in `grep -r -s -l "$1" *` ; do
  echo "File: $FILE"
  mv $FILE $FILE.bak
  sed 's/'"$1"'/'"$2"'/g' $FILE.bak > $FILE
done
 
servers/command/sed_grep_file.txt · Darrera modificació: 2010/02/25 13:59 per jesteve
 
Copyright: Zikzakmedia Llicència Creative Commons By-NC-SA
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki