Aby edytować plik w sposób nieinteraktywny ex
( vi
jest to tryb wizualny ex
), 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 jak ed
).
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:
$ ex -sc'%p|q!' <(echo Example)
$ echo Example | ex -sc'%p|q!' /dev/stdin
Oto prosty przykład, jak wydrukować plik po podstawieniu:
$ ex /etc/hosts +%s/127/128/ge -sc'%p|q!'
Więcej przykładów edycji plików w miejscu:
$ ex +'%s/127/128/g' -cswq file
$ ex -sc '%s/olddomain\.com/newdomain.com/g|x' file
$ printf '%s\n' 'g/olddomain\.com/s//newdomain.com/g' w q | ex -s file
$ ex -s "$file" <<< $'g/old/s//new/g\nw\nq'
$ ex -sc 'argdo %s/old/new/ge|x' ./**
$ find . -type f -exec ex -sc '%s/old/new/g|x' {} \;
Możesz także użyć, -s {scriptin}
aby polecenia były ładowane z pliku, na przykład:
$ printf "%s\n" '%s/foo/test/ge' 'wq' > cmds.vim
$ vim -s cmds.vim -es file
lub używając przekierowania I / O:
$ vim file < cmds.vim
Aby edytować jeden plik i zapisać zmiany w innym, sprawdź następujące przykłady:
$ ex +%s/127/128/g -sc'wq! new_file' /etc/hosts
$ cat /etc/hosts /etc/fstab | vim - -es '+:%s/foo/test/g' '+:wq! file3'
Więcej praktycznych przykładów.
Przykład na żywo ze specyfikacji RPM :
vim -E -s Makefile <<-EOF
:%substitute/CFLAGS = -g$/CFLAGS =-fPIC -DPIC -g/
:%substitute/CFLAGS =$/CFLAGS =-fPIC -DPIC/
:%substitute/ADAFLAGS =$/ADAFLAGS =-fPIC -DPIC/
:update
:quit
EOF
Wyodrębnianie tagów HTML :
ex -s +'bufdo!/<div.*id=.the_div_id/norm nvatdggdG"2p' +'bufdo!%p' -cqa! *.html
Usuwanie tagów XML :
ex -s +'%s/<[^>].\{-}>//ge' +%p +q! file.txt
Usuwanie znacznika stylu z nagłówka i wydrukowanie przeanalizowanego wyniku:
curl -s http://example.com/ | ex -s +'/<style.*/norm nvatd' +%p -cq! /dev/stdin
Analizuj HTML z wieloma złożonymi regułami:
ex -V1 $PAGE <<-EOF
" Correcting missing protocol, see: https://github.com/wkhtmltopdf/wkhtmltopdf/issues/2359 "
%s,'//,'http://,ge
%s,"//,"http://,ge
" Correcting relative paths, see: https://github.com/wkhtmltopdf/wkhtmltopdf/issues/2359 "
%s,[^,]\zs'/\ze[^>],'http://www.example.com/,ge
%s,[^,]\zs"/\ze[^>],"http://www.example.com/,ge
" Remove the margin on the left of the main block. "
%s/id="doc_container"/id="doc_container" style="min-width:0px;margin-left : 0px;"/g
%s/<div class="outer_page/<div style="margin: 0px;" class="outer_page/g
" Remove useless html elements. "
/<div.*id="global_header"/norm nvatd
wq " Update changes and quit.
EOF
Jeszcze więcej przykładów:
Zobacz też:
file
z drugiego wiersza poleceń.