J'utilise grep -e Peugeot -e PeuGeot carlist.txt
pour rechercher dans carlist.txt et extraire certains éléments et j'ai supposé que grep -e Peugeot -e PeuGeot carlist.txt | vi
me le ferait passer, mais voici ce que j'obtiens:
Vim: Warning: Input is not from a terminal
Vim: Error reading input, exiting...
Vim: preserving files...
Vim: Finished.
L'exécution de vi ou vim avec '-' comme argument lui fait lire le fichier à éditer à partir de l'entrée standard. Par conséquent:
grep -e Peugeot -e PeuGeot carlist.txt | vi -
fera ce dont vous avez besoin.
Outre vim -
, Vous pouvez également utiliser la substitution de processus en utilisant la syntaxe <(command)
, par exemple:
vim <(echo This is example.)
vim <(cat /etc/hosts)
Voir également:
Vous devez utiliser redirection de sortie :
grep ... > newfile.txt && vi newfile.txt
De plus, je pense que votre grep
peut être amélioré:
grep 'Peu[gG]eot' carlist.txt > newfile.txt && vi newfile.txt
La redirection de sortie peut également être utilisée comme ceci:
vi <(grep ...)
Même plusieurs sorties de commande peuvent être redirigées, comme si elles étaient enregistrées dans des fichiers séparés:
vim -d <(ls) <(ls -a)
Dans ~/bin/r
:
#!/bin/sh
[ $# -eq 0 ] && set -- -;
exec vi -R "$@"
dans ~/.vimrc
:
: au StdinReadPost * set buftype=nofile
Alors:
ls |r
grep -e Peugeot -e PeuGeot carlist.txt | r
et j'ai
r- () { "$@" | r; }
dans mon ~/.bashrc,
donc
r- ls -l
Il existe de nombreuses façons efficaces de faire ce que vous voulez, à l'intérieur de vi (m) ou à l'extérieur de vi (m).
Exécutez votre commande, créez un fichier (temporaire), puis modifiez le fichier ( voir la réponse de Joseph R. )
grep -e"Peu[gG]eot" carlist.txt && vi /tmp/peugeot.txt
Exécutez votre commande (en arrière-plan) pour produire un fichier temporaire et modifiez le fichier en utilisant ": e!" pour actualiser votre fichier au fur et à mesure qu'il est produit (ceci est utile pour les fichiers journaux et d'autres fichiers produits par un autre processus, par exemple cron?),
grep -e "Peu[gG]eot" carlist.txt > /tmp/peugeot.txt &
vi /tmp/peugeot.txt
Exécutez vi (m) et exécutez un processus enfant pour créer le fichier temporaire, puis lisez-le,
vi
:!grep -e "Peu[gG]eot" carlist.txt > /tmp/peugeot.txt
:r /tmp/peugeot.txt
Ou, passez simplement au fichier,
:e /tmp/peugeot.txt
Exécutez vi (m) et utilisez le double coup "!!" pour que vi exécute la commande enfant, en prenant les résultats et en les insérant dans l'emplacement actuel (écrase la ligne actuelle, alors assurez-vous d'avoir une ligne vierge),
vi
i
here
empty
there
<esc>
kk
!!grep -e "Peu[gG]eot" carlist.txt
Et maintenant, vous pouvez écrire le fichier (si vous le souhaitez) dans n'importe quel nom de fichier,
:w /tmp/someotherfilename.txt
Et réponse de Petr Uzel est également bon,
grep -e "Peu[gG]eot" carlist.txt | vi -
Qui lit de stdin