Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: Modyfikacja pliku  (Przeczytany 6618 razy)

radek1986

  • Gość
Modyfikacja pliku
« dnia: 2008-03-14, 18:16:38 »
Witam, chciałbym napisać skrypt konfiguracyjny.. Stanąłem na problemie konfiguracji Apache, nie wiem jak w bashu zmienić jedną linie dużym pliku, takim jak np. httpd.conf.

Może ktoś coś podpowie ??;)

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Modyfikacja pliku
« Odpowiedź #1 dnia: 2008-03-14, 18:57:52 »
Możesz chociażby użyć [g]awk do zmiany linii pasującej do wzorca na swoją własną.
Jeżeli szukasz linii o postaci "ZMIENNA=..." i chcesz zamienić ją na "ZMIENNA=WARTOSC", to możesz napisać:
awk "{ if( /^ZMIENNA=.*$/ ) { print \\"ZMIENNA=WARTOSC\\" } else { print \\$0 } }" PLIK > PLIK.2
mv PLIK.2 PLIK
Mam nadzieję, że o to chodziło.


Pozdrawiam.

tadzik1990

  • Gość
Modyfikacja pliku
« Odpowiedź #2 dnia: 2008-03-14, 20:16:08 »
a nie łatwiej jakimś edytorem tekstu? vim, nano, pico, arsenał jest ogromny

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Modyfikacja pliku
« Odpowiedź #3 dnia: 2008-03-14, 22:03:31 »
Cytat: radek1986
[...] chciałbym napisać skrypt konfiguracyjny [...]
Więc chyba edytor wymagający interakcji użytkownika odpada.

radek1986

  • Gość
Modyfikacja pliku
« Odpowiedź #4 dnia: 2008-03-14, 22:12:10 »
Dzięki ultr, oto chodziło :)

A możesz jeszcze napisać w jaki sposób dopisać do danej linii jakiś wpis ?? ;)

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Modyfikacja pliku
« Odpowiedź #5 dnia: 2008-03-15, 02:15:44 »
> A możesz jeszcze napisać w jaki sposób dopisać do danej linii jakiś wpis ?? ;)

Chodzi ci o dodanie czegoś na końcu danej linii?
awk "{ if( /^ZMIENNA=.*$/ ) { print \\$0\\" TEKST DO DOPISANIA\\" } else { print \\$0 } }" PLIK > PLIK.2
mv PLIK.2 PLIK
Proponuję jeszcze uwzględniać linie ze spacjami/tabulacjami na początku. Wtedy wyrażenie powinno wyglądać tak: ^[[:space:]]*ZMIENNA=.*$

radek1986

  • Gość
Modyfikacja pliku
« Odpowiedź #6 dnia: 2008-03-17, 13:03:45 »
Dzięki bardzo, masz może jakąś ciekawą stronę o AWK ?? Chętnie bym poczytał, bo nie do końca rozumiem tą całą składnie ;) Chodzi mi o np kropkę, slashe itp ;)

arctgx

  • Gość
Modyfikacja pliku
« Odpowiedź #7 dnia: 2008-03-17, 14:40:12 »
Cytat: radek1986
masz może jakąś ciekawą stronę o AWK ??
Myślę, że samą wyszukiwarką wiele zdziałasz dla zaczęcia od przykładów. Ale do man awk (po polsku jest) też warto zaglądać krok po kroku.

Zobacz też na temat seda z parametrem -i. Może w Twoim przypadku będzie prościej użyć jego. Tak czy tak, warto stopniowo poznawać oba programy. Sam jednak w pierwszej kolejności szukam rozwiązania wśród wewnętrznych poleceń powłoki, dla zwiększenia (jak zdawałoby się) wydajności.

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Modyfikacja pliku
« Odpowiedź #8 dnia: 2008-03-17, 15:04:20 »
W // jest wyrażenie regularne, w którym "." oznacza dowolny znak, a "*" wskazuje, że ma być on powtórzony dowolną (w tym zero) ilość razy.

Co do samego awk, to jak najbardziej polecam`man awk`. Lub też "awk" na Google - wyskakuje kilkanaście tutoriali, w tym ten: http://sokrates.mimuw.edu.pl/~sebek/awk.html.


Pozdrawiam.