Strona 1 z 1

[bash] Prośba o wsparcie w zlozeniu polecenia

: 10 kwie 2010, 21:56
autor: WRB
Witam,

Muszę w kilku plikach zmienić stringa na innego stringa. Podejrzewam (mam nadzieję), że da się zrobić to za pomocą grepa + czegoś tam.

Mógłbym liczyć na wsparcie ?

Rozpoczął bym tak:

Kod: Zaznacz cały

grep -r "szukany_string" /sciezka/do/katalogu/ | ... 
Pozdrawiam

Odp: [bash] Prośba o wsparcie w zlozeniu polecenia

: 10 kwie 2010, 22:29
autor: dk75

Kod: Zaznacz cały

man sed
[15+ znaków]

Odp: [bash] Prośba o wsparcie w zlozeniu polecenia

: 10 kwie 2010, 22:43
autor: maly_wariat
grep szukany_string scieszka/do/pliku|sed -e 's:szukany_string:zamieniony_string:'
chyba o to Ci chodzi

Odp: [bash] Prośba o wsparcie w zlozeniu polecenia

: 11 kwie 2010, 15:34
autor: dawidgarus

Kod: Zaznacz cały

for i in /sciezka/do/katalogu/*; do
sed 's/szukany_string/nowy_string/' "$i" > /tmp/temp
mv /tmp/temp "$i"
done

Odp: [bash] Prośba o wsparcie w zlozeniu polecenia

: 11 kwie 2010, 19:00
autor: otokan
dawidgarus: usuń szybko znaczek '>' z wiersza zawierającego mv, zanim ta pętla wyczyści komuś wszystkie pliki w katalogu

Poza tym zapoznajcie się z opcją seda '-i'.
Polecenie

Kod: Zaznacz cały

sed -i 's/siekierka/kijek/' /ble/*
powinno załatwić cała sprawę.

Odp: [bash] Prośba o wsparcie w zlozeniu polecenia

: 11 kwie 2010, 21:47
autor: beluosus
Eh, średnio co pół miesiąca pojawia się pytanie na które odpowiedzią jest

Kod: Zaznacz cały

sed -i 's/...
Pan otokan prawie trafił. Otóż jego polecenie zamieni tylko pierwsze wystąpienie danego ciągu (brak /g) i tylko pod warunkiem, że w katalogu nie będzie podkatalogów. Oto bardziej uniwersalne polecenie:

Kod: Zaznacz cały

find some/dir -type f -print -exec sed -i 's/siekierka/kijek/g' {} \;
-print, aby mieć listę plików, które sed zmielił.

EDIT:
Aha, sed zostanie zastosowany dla wszystkich plików we wszystkich podkatalogach. Aby ograniczyć zamianę tylko do plików w katalogu "some/dir" trzeba ustawić maxdepth:

Kod: Zaznacz cały

find some/dir -maxdepth 1 -type f -print -exec sed -i 's/siekierka/kijek/g' {} \;