четверг, 28 июня 2012 г.

Примеры замены подстроки в файлах на perl, sed, awk

Часто бывает нужно заменить какую то 1 строку в конфигурационном файле из скрипта. Чтобы далеко не ходить можно использовать следующие примеры скриптов.

1. Замена подстроки в одном файле с помощью sed

$ cat ./file.txt
I have three dogs.

$ sed -e 's/dog/cat/g' ./file.txt
I have three cats.

2. Замена подстроки в одном файле с помощью perl (вариант короче, но нужен perl)

perl -e 's/dog/cat/g' -pi ./filename

3. Замена подстроки в нескольких файлах с помощью простого bash-скрипта
#!/bin/bash
f="cat"
t="dog"
for i in `egrep -r $f ./www | grep -v svn | cut -d ":" -f1`
do
    reg="s/$f/$t/g"
    sed -e $reg $i > ${i}.bak
    mv ${i}.bak $i
    echo $i
done

4. Замена подстроки в нескольких файлах с помощью perl одной командой
egrep -rl "dog" ./ | xargs -i perl -pi -e 's/dog/cat/g' '{}'

5. Замена подстроки в нескольких файлах с помощью awk одной командой 
awk '{gsub("cat", "dog", $0); print > FILENAME}' ./*


Источник: http://www.gnuman.ru/stuff/sed/

2 комментария:

Анонимный комментирует...

#!/bin/bash

content=`cat ./file.txt`

a=${content//dog/cat}

echo "$a"

Анонимный комментирует...

#sed -ne 's/\(.*\)dog\(.*\)/\1cat\2/p' ./file.txt


BTW, sed oneliners:
http://www.catonmat.net/blog/wp-content/uploads/2008/09/sed1line.txt