# [SOLVED] Zastepowanie ciagu znakow

## soban_

Dosyc fajnym sposobem na wyszukanie ciagu znakow w danym folderze i podfolderach jest: 

```
find . -name "*" -exec grep -H 'Edit this entry.' {} \;

./wp-content/themes/GamezMag/page.php:          <?php edit_post_link('Edit this entry.', '<p>', '</p>'); ?>

./wp-content/themes/GamezMagBEZKOLUMN/page.php:         <?php edit_post_link('Edit this entry.', '<p>', '</p>'); ?>

./wp-content/themes/pixel2/page.php:<br/><small><?php edit_post_link('Edit this entry?','',''); ?></small>

./wp-content/themes/pixel2/page_fullwidth.php:<br/><small><?php edit_post_link('Edit this entry?','',''); ?></small>

./wp-content/themes/pixel2/single.php:<br/><small><?php edit_post_link('Edit this entry?','',''); ?></small>

./wp-content/themes/pixel/page.php:<br/><small><?php edit_post_link('Edit this entry?','',''); ?></small>
```

 Jednak trzeba recznie wchodzic i edytowac te wpisy. Czy istnieje jakis szybki sposob na zamiane danego ciagu znakow na inny, zamiast edytkowac kazdy plik recznie? (Fajnie jeszcze jesli pokazywalby sciezke do pliku i pytal sie czy zastapic to w taki sposob - w jaki sposob bedzie linijka wygladac po edycji, bo wiadomo nie zawsze to moze byc dobre.)

----------

## joi_

```
perl -pi -e 's/xxx/yyy/g' plik
```

----------

## SlashBeast

po co find jak grep ma przelacznik -r? Mozesz zrobic, by grep zwracal tylko pliki zawierajace i uzyc seda z -i do zmiany.

----------

## sebas86

Z findem można jeszcze odfiltrować po nazwie.

```
find . -name "*" -exec sed {} 's/Edit this entry/dupa/' > /tmp/tmp.txt \; -exec mv /tmp/tmp.txt {} \;
```

----------

## soban_

Jakby komus byla potrzebna wersja, ktora szuka bez binarek to:

```
x=`find . -type f -exec grep -q "slowo_szukane" '{}' \; -print |  xargs file | grep ASCII | cut -d: -f1 | xargs` && sed -i 's//slowo_zastepowane/' $x
```

jak ktos ma ochote i czas to moze to ladniej napisac d-: mam tylko pytanko jesli sa takie 3 "stringi" w jednym pliku to musze wywolac ta linijke 3x, czy jest jakis szybszy myk zeby sed zrobil to dla calego pliku, a nie tylko dla jednego "stringa" w danym pliku?

//edit troche lepsza wersja (bez binarek):

```
x=`grep -R slowo_szukane * | grep -o "^.*\:" | sed "s/://g" | xargs` && sed -i 's/slowo_szukane/slowo_zastepowane/' $x
```

Z tym stringiem to chodzi mi o cos takiego (cat /etc/hosts):

 *Quote:*   

> 10.1X0.X6.4X3    slowo_szukane       slowo_szukane.varible        slowo_szukane.varible

 aby zastapiac kazdy z tych znakow musze wywolac skrypt 3x. Da rade jakos 'lepiej' potraktowac sedem?

----------

## sebas86

 *Quote:*   

> x=`grep -R slowo_szukane * | grep -o "^.*\:" | sed "s/://g" | xargs` && sed -i 's/slowo_szukane/slowo_zastepowane/g' $x

  Magiczne g we wskazanym miejscu nie rozwiązuje problemu?

----------

## soban_

Pomoglo, dziekuje - solved.

----------

