Chciałbym edytować pliki przekazywane w danych wejściowych potoku za pomocą vima w sposób nieinteraktywny lub edytować pliki w miejscu (podobne do sed
).
Kilka przykładów przy użyciu sed
:
$ sed -i'.bak' s/foo/test/g file # Edit file in-place.
$ cat file | sed s/foo/test/g # Parse file in pipeline.
Mogłem jednak przeczytać tutaj , że:
sed
to iterator S tream ED , a nie edytor plików. Niemniej jednak ludzie na całym świecie mają tendencję do nadużywania go podczas próby edycji plików. Nie edytuje plików.
Po drugie, niektóre opcje, takie jak edycja lokalna ( -i
), są przenośne.
Jak tę samą funkcjonalność można uzyskać w vimie?
file
z drugiego wiersza poleceń.Odpowiedzi:
Aby edytować plik w sposób nieinteraktywny
ex
(vi
jest to tryb wizualnyex
), można użyć parametrów+{command}
lub-c {command}
parametrów, które pozwalają wykonać polecenia vi po odczytaniu pierwszego pliku.ex
To standardowy edytor wiersza poleceń (podobnie jaked
).Należy również
vipe
użyć (edytora potoków poleceń Vima), który jest częściąmoreutils
pakietu i pozwoli ci uruchomić edytor w środku potoku unix i edytować dane przesyłane między programami.Przykłady
Dzięki tej składni powłoki można osiągnąć proste standardowe wejście i wyjście za pomocą potoków:
Oto prosty przykład, jak wydrukować plik po podstawieniu:
Więcej przykładów edycji plików w miejscu:
Możesz także użyć,
-s {scriptin}
aby polecenia były ładowane z pliku, na przykład:lub używając przekierowania I / O:
Aby edytować jeden plik i zapisać zmiany w innym, sprawdź następujące przykłady:
Więcej praktycznych przykładów.
Przykład na żywo ze specyfikacji RPM :
Wyodrębnianie tagów HTML :
Usuwanie tagów XML :
Usuwanie znacznika stylu z nagłówka i wydrukowanie przeanalizowanego wyniku:
Analizuj HTML z wieloma złożonymi regułami:
Jeszcze więcej przykładów:
Zobacz też:
źródło
vim '+:0,$s/foo/test/g' '+:wq! file2' file1
zamiast tego.bufdo
. Mimo że Vim jest instalowany praktycznie wszędzie, warto wiedzieć, że możesz edytować skrypty plików tylko przy użyciu funkcji zgodnych z POSIXex
.ex
naprawdę się tego nauczyć. Dziękuję Ci. Niektóre dalsze czytanie na ten temat (pełne ujawnienie: napisałem je;) to: odwracanie co cztery linieex
i używanie-c
opcji . Jeśli chcesz, możesz dodać je do listy linków na dole. :)