Skrypt powłoki - jak zamienić linie


Ubuntu 9.10
Cześć chłopaki,
Chcę stworzyć skrypt, który będzie automatycznie aktualizował jedną linię w pliku .htaccess. Czy ktoś mógłby mi wskazać instrukcje tworzenia podstawowego skryptu wyszukiwania i zamiany?
Wyobrażam sobie coś, co w zasadzie mówi: „Poszukaj specjalnych znaczników #ABC i #XYZ… usuń wpisy między znacznikami i zastąp je 'foo'”.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Czy chcesz
         sed
:
         sed -i s/regex to look for/string to replace it with/
Jeśli chcesz, aby było to wiele wierszy, możesz pisać bardziej złożone skrypty, chociaż w pewnym momencie moc i zwięzłość seda zaczyna działać przeciwko temu, a ja wolę pisać w bardziej rozwlekłym, ale ogólnie zrozumiałym języku skryptowym (wolę Ruby , ale gusta są różne).
Jeśli możesz podać prawdziwy przykład tego, co próbujesz osiągnąć, ktoś prawdopodobnie wymyśli „lepszy” sposób na zrobienie tego; twój przykład jest na tym etapie bardzo niejasny, aby dać konkretne rozwiązanie.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Jeśli twoje pliki są małe (myślę, że powinieneś mieć .htaccess), Perl może je połknąć i traktować wszystko jako pojedynczą linię za pomocą s/// s (modyfikator 's' na końcu traktuje całą linię jako pojedynczą linię) .
Przykład: perl -i.bak -p -0 -e 's/# ABC \ n. * # XYZ/foo/s 'lista nazw plików
-i.bak mówi Perlowi, aby zachował kopie zapasowe, w takim przypadku nazywa się to list.bak of.bak file.bak names.bak -p -0 mówi Perlowi, aby połknął cały plik, a -e mówi mu, aby zastosować wyrażenie regularne do wiersz poleceń.
Ta konkretna wersja zastąpi tylko pierwszy zestaw tokenów i nie zrobi nic, jeśli tokeny w ogóle nie istnieją (ale i tak utworzy pliki kopii zapasowej).
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Spróbuj tego:
awk '/^#ABC/ {start=1; print; next}/^#XYZ/ {start=0; print "foo"; print; next} start!=1 {print}' .htaccess > .htaccess.NEW

Można go skrócić do:
awk '/^#ABC/ {start=1; print; next}/^#XYZ/ {start=0; print "foo"} start!=1 {print}' .htaccess > .htaccess.NEW

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się