web-dev-qa-db-fra.com

Ajout de caractères au début et à la fin de chaque ligne d'un fichier

Quelle est la meilleure façon d'ajouter des caractères au début et à la fin de chaque ligne? Cela peut-il être fait en utilisant Vim, ou d'une autre manière?

42
Myth

En vim, vous pouvez faire

:%s/^\(.*\)$/"\1"/
  • s/regex/replace/ est la commande vim pour la recherche n remplacer.
  • % le fait appliquer tout au long du fichier
  • ^ et $ indique respectivement le début et la fin de la ligne.
  • (.*) capture tout entre les deux. ( et ) doit être échappé dans les expressions rationnelles vim.
  • \1 place le contenu capturé entre deux guillemets.
71
Amarghosh

plus simple:

%s/.*/"&"

Explication: Par défaut, un modèle est interprété comme la plus grande correspondance possible, donc .* est interprété comme la ligne entière, sans besoin de ^ et $. Et tandis que \(...\) peut être utile pour sélectionner une partie d'un motif, il n'est pas nécessaire pour tout le motif, qui est représenté par & dans la substitution. Et la finale / dans une recherche ou une substitution n'est pas nécessaire sauf si quelque chose d'autre suit; mais le laisser de côté pourrait être considéré comme de la paresse. (Si oui, je suis paresseux.)

53
George Bergman

Les deux réponses suggérant %s sont parfaits, et j'espère que vous apprendrez à aimer %s et l'utiliser souvent. Mais si vous vous retrouvez à vouloir entourer fréquemment d'autres blocs de texte, vous vous devez de vérifier le plugin surround.vim , qui vous permettra de faire ce que vous avez demandé avec les quatre touches suivantes : yss" Et il existe de nombreuses autres cibles surround intégrées utiles. Par exemple, pour entourer le mot actuel avec des guillemets doubles: csw", et pour remplacer les guillemets simples environnants par des guillemets doubles: cs'".

surround.vim est l'un de mes plugins vim préférés, et je l'utilise quotidiennement.

3
nicholas a. evans

un meilleur usage serait sed (surtout si vous avez besoin de l'écrire)

cat foo.txt | sed s/^\(.*\)$/"\1"/g
2
Mainguy