Linux за българи: Форуми

Linux секция за напреднали => Хардуерни и софтуерни проблеми => Темата е започната от: mishot в Jul 30, 2008, 13:14



Титла: подмяна на дума във файл през bash
Публикувано от: mishot в Jul 30, 2008, 13:14
налага се да сменя мейл адрес, намиращ се на доста места в доста различни файлове.
пример:
       в кода на няколко html, php файла на локален сървър се съдържа адреса
       primer@domain.com
Опитах с:
       cat primer.html | grep primer@domain.com
и ми извади местата, където се среща primer@domain.com.
Как да го накарам да замести primer@domain.com с admin@domain.com(новия мейл)





Титла: подмяна на дума във файл през bash
Публикувано от: ANTIADMIN в Jul 30, 2008, 13:39
man sed
man vi
:(


Титла: подмяна на дума във файл през bash
Публикувано от: phobot в Jul 30, 2008, 13:42
можеш да иползваш sed
Примерен код
sed  's/primer@domain.com/admin@domain.com/' file.php > file.php.new

*много важно е файла който записваш да е различен от файла който променяш! След като промените са направени можеш да преместиш файла със
Примерен код
mv file.php.new file.php






Титла: подмяна на дума във файл през bash
Публикувано от: pvt в Jul 30, 2008, 15:29
Вече не си спомням защо не се спрях на sed, но perl ми върши добра работа точно в подобни случаи. Командата е perl -i -pe 's/OLDSTRING/NEWSTRING/g' $file
Обикновено използвам нещо подобно:

Примерен код
#!/bin/bash
for Files in `find -type f | grep html` # Search for *.html files
do
perl -i -pe 's/primer\@domain\.com/admin\@domain\.com/g' $Files # Substitute content
done
exit 0


Това ще промени всичко и в поддиректориите.


Титла: подмяна на дума във файл през bash
Публикувано от: mishot в Jul 30, 2008, 15:29
Цитат (phobot @ Юли 30 2008,14:42)
можеш да иползваш sed
Примерен код
sed  's/primer@domain.com/admin@domain.com/' file.php > file.php.new

*много важно е файла който записваш да е различен от файла който променяш! След като промените са направени можеш да преместиш файла със
Примерен код
mv file.php.new file.php

Благодаря ти! Трябваше да си играя цял ден, а така стана с 1 ред.

Проблема е решен!


Титла: подмяна на дума във файл през bash
Публикувано от: teh в Jul 31, 2008, 14:53
find path/ -type f -iname \*.php -or -iname \*.html | xargs sed -i.backup s/user\@domain.tld/pepi\@domain.tld/gi

без бекъп копия съответно:

find path/ -type f -iname \*.php -or -iname \*.html | xargs sed -i s/user\@domain.tld/pepi\@domain.tld/gi





Титла: подмяна на дума във файл през bash
Публикувано от: nov_chovek в Jul 31, 2008, 17:40
А добрата стара функция "Find & Replace"  - имаш я във всеки GUI текстов редактор!!!


Титла: подмяна на дума във файл през bash
Публикувано от: senser в Jul 31, 2008, 18:12
Цитат (nov_chovek @ Юли 31 2008,17:40)
А добрата стара функция "Find & Replace"  - имаш я във всеки GUI текстов редактор!!!

човека пита за bash все пак, най вероятно няма графичен интерфейс ;)


Титла: подмяна на дума във файл през bash
Публикувано от: nov_chovek в Jul 31, 2008, 18:40
ам някои GUI редактори имат и command line параметри де :)


Титла: подмяна на дума във файл през bash
Публикувано от: senser в Jul 31, 2008, 19:18
Цитат (nov_chovek @ Юли 31 2008,18:40)
ам някои GUI редактори имат и command line параметри де :)

е добре де, ама имат като зависимост някоя граф. среда :)


Титла: подмяна на дума във файл през bash
Публикувано от: dvbb в Aug 01, 2008, 10:58
mcedit ->F4


Титла: подмяна на дума във файл през bash
Публикувано от: mishot в Aug 01, 2008, 12:17
Проблема е решен, както писах по-горе.
Благодаря още веднъж на всички отзовали се!


Титла: подмяна на дума във файл през bash
Публикувано от: Hapkoc в Aug 01, 2008, 14:54
/offtopic

Добре де хора, човека вече си реши проблема, вие продължавате да пишете простотии...

mc -> F4 - гениално! Като имаш 300 файла, в които да го промениш, ше знаеш че е най-доброто решение това.

Същата работа с GUI редакторите...

аман