views:

38

answers:

5

i have more than 1000 files and want to replace a special text in all of them with another phrase.

how can i do it by shell script in linux?

A: 

Use sed.

poke
+1  A: 

Something like this:

for file in *.txt
do
    cp $file $file.tmp
    cat $file.tmp | sed 's/foo/bar/g' > $file
done
Sjoerd
You can use `-i` to edit the files in place, so there is neither a need for a temporary file nor for a loop.
poke
+4  A: 
sed -i 's/old-word/new-word/g' *.txt

http://www.cyberciti.biz/faq/unix-linux-replace-string-words-in-many-files/

Māris Kiseļovs
thanks.simple and clear answer ;)
hd
+1  A: 

You could also use perl:

perl -pi -e 's/find/replace/g' *.txt
Ruel
+1  A: 

Just bash

for file in *.txt
do
   while read -r line
   do
     case "$line" in
       "*pattern*") line="${line//pattern/new}";;
     esac
     echo "$line"
   done <"$file" > t
   mv t "$file"
done
ghostdog74