[bash] Prośba o wsparcie w zlozeniu polecenia

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
WRB
Piegowaty Guziec
Piegowaty Guziec
Posty: 28
Rejestracja: 09 lis 2006, 15:26
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

[bash] Prośba o wsparcie w zlozeniu polecenia

Post 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
Awatar użytkownika
dk75
Przebojowy Jelonek
Przebojowy Jelonek
Posty: 1142
Rejestracja: 07 mar 2007, 22:59
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: GNOME
Architektura: x86_64

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

Post autor: dk75 »

Kod: Zaznacz cały

man sed
[15+ znaków]
Linux Mint Debian Edition x86_64/2.6.39, Conky 1.8.0, Xorg 7.6/1.10.4 - GNOME 2.30.2, nVidia 285.03
Lenovo T61p, HITACHI HTS722010K9SA00 100GB, ST9250827AS 250GB
http://linuxcounter.net/user/483055.html
Awatar użytkownika
maly_wariat
Sędziwy Jeż
Sędziwy Jeż
Posty: 73
Rejestracja: 25 sie 2009, 21:41
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86

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

Post autor: maly_wariat »

grep szukany_string scieszka/do/pliku|sed -e 's:szukany_string:zamieniony_string:'
chyba o to Ci chodzi
"Dopóki nie skorzystałem z internetu, nie wiedziałem że na świecie żyje tylu idiotów " - S.Lem.
dawidgarus
Wytworny Kaczor
Wytworny Kaczor
Posty: 418
Rejestracja: 09 lut 2007, 23:17
Płeć: Mężczyzna
Wersja Ubuntu: 9.10
Środowisko graficzne: GNOME
Architektura: x86
Kontakt:

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

Post 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
otokan
Sędziwy Jeż
Sędziwy Jeż
Posty: 65
Rejestracja: 11 gru 2008, 11:20
Płeć: Mężczyzna
Wersja Ubuntu: 10.04
Środowisko graficzne: GNOME
Architektura: x86

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

Post 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ę.
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

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

Post 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' {} \;
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 2 gości