Mam więc kilka plików w katalogu i muszę wstawić wiersz tekstu do każdego z nich. Mają zasadniczo następujący format:
<VirtualHost *:80>
ServerAdmin gabe@localhost
DocumentRoot /var/www/test1
ServerName test1.local
ServerAlias test1
<Directory "/var/www/test1">
Options All
AllowOverride All
</Directory>
</VirtualHost>
I chciałbym wstawić linię przed zamknięciem
</VirtualHost>etykietka. Moje pierwsze założenie jest takie, że powinienem być w stanie to zrobić przy pomocy sed, prawdopodobnie dopasowując i zastępując ten tag. Zacznę teraz próbować tego, ale jeśli ktoś ma taki sposób, chciałbym to usłyszeć.
text-processing
sed
Gabe.
źródło
źródło
Odpowiedzi:
Coś takiego:
Pracuje. Jeśli chcesz powtórzyć to polecenie na wielu plikach, możesz zrobić coś takiego:
Prawdopodobnie lepszy (ale nie przetestowany) dzięki @ChrisDown:
źródło
/
wyrażenie sed jest czystszy, ponieważ nie musisz uciekać przed ukośnikiem:'s:</VirtualHost>:yourlinehere\n</VirtualHost>:'
Jeśli nie masz nic przeciwko Perlowi, spróbuj:
-i
Przełącznik zbawi swój stary plik z.old
rozszerzeniem i wydrukować do obecnego.źródło
Możesz także użyć „ex” (linia poleceń vi), jeśli edycja, którą chcesz wykonać, jest nawet nieco skomplikowana. Na przykład chcesz wstawić tylko dla jednego wystąpienia „”.
Taki skrypt powłoki może działać:
Takie podejście daje zalety „ex”: znalezienie lokalizacji z wzorami elaboarte i „ruchy kursora”. Możesz zrobić takie rzeczy, jak znaleźć wzór, a następnie znaleźć następną instancję, TO następnie wstawić. Lub możesz zmienić tekst, a nie tylko wstawiać. Lub możesz zmieniać zakresy. Nie zapominaj, że „ex” pozwala używać ”. jako bieżąca linia, więc. / ^ somepatter / s / blah / foo / będzie działać.
źródło
Możesz użyć następującego kodu pojedynczej linii, aby wstawić jedną linię lub wiele linii do danej lokalizacji w pliku, w twoim przypadku przed „VirtualHost”. Kod w zasadzie wyszukuje nazwę pliku (może to być *. *, Jeśli chcesz wstawić teksty do wszystkich plików) w danym katalogu i jego podkatalogach. W obrębie znalezionych plików szuka wzorca „VirtualHost”. Po znalezieniu wzorca zastępuje go wierszem pierwszym \ nsecondline \ notherlines \ n \ VirtualHost. Pamiętaj, że „VirtualHost” jest częścią tekstu do wymiany, w przeciwnym razie go utracimy.
źródło