Je souhaite modifier les fichiers transmis en entrée de pipeline à l'aide de vim de manière non interactive ou modifier les fichiers sur place (similaire à sed
).
Quelques exemples utilisant sed
:
$ sed -i'.bak' s/foo/test/g file # Edit file in-place.
$ cat file | sed s/foo/test/g # Parse file in pipeline.
Cependant, je pourrais lire ici , que:
sed
est un éditeur S tream ED , pas un éditeur de fichiers. Néanmoins, les gens du monde entier ont tendance à en abuser pour essayer d'éditer des fichiers. Il ne modifie pas les fichiers.
Deuxièmement, certaines options telles que l'édition sur place ( -i
) sont portables.
Comment obtenir la même fonctionnalité dans vim?
file
de votre deuxième ligne de commande.Réponses:
Pour éditer un fichier de manière non interactive en utilisant
ex
(vi
est le mode visuel pourex
), vous pouvez utiliser des paramètres+{command}
ou-c {command}
qui vous permettent d'exécuter les commandes vi après la lecture du premier fichier.L'
ex
est un éditeur de ligne de commande standard (similaire àed
).Il existe également
vipe
(un éditeur de canal de commande Vim) qui doit être utilisémoreutils
et qui vous permet d'exécuter votre éditeur au milieu d'un pipeline Unix et de modifier les données qui sont transmises entre les programmes.Exemples
L'entrée et la sortie standard simples à l'aide de canaux peuvent être obtenues par cette syntaxe shell:
Voici un exemple simple pour imprimer le fichier après substitution:
Plus d'exemples pour éditer des fichiers sur place:
Vous pouvez également utiliser
-s {scriptin}
pour que les commandes soient chargées à partir du fichier, par exemple:ou en utilisant la redirection d'E / S:
Pour modifier un fichier et enregistrer les modifications dans un autre, consultez les exemples suivants:
Des exemples plus pratiques.
Exemple réel en direct de la spécification RPM :
Extraction de balises html :
Suppression des balises XML :
Suppression de la balise de style de l'en-tête et impression de la sortie analysée:
Analyser du HTML avec plusieurs règles complexes:
Encore plus d'exemples:
Voir également:
la source
vim '+:0,$s/foo/test/g' '+:wq! file2' file1
place.bufdo
. Même si Vim est ce qui est installé pratiquement partout, il vaut la peine de savoir que vous pouvez modifier les fichiers de script en utilisant uniquement les fonctionnalités compatibles POSIX deex
.ex
et à vraiment l'apprendre. Merci. Une lecture supplémentaire sur ce sujet (divulgation complète: j'ai écrit ces;) est la suivante: inverser toutes les quatre lignes avecex
et utiliser l'-c
option . Vous pouvez les ajouter à votre liste de liens en bas, si vous le souhaitez. :)