Le meilleur outil pour l'édition de fichiers sur place non interactive est ex
.
ex -sc '%s/\(\.com\).*/\1/ | x' file.txt
Si vous avez utilisé vi
et si vous avez déjà tapé une commande commençant par deux points, :
vous avez utilisé une commande ex. Bien sûr, bon nombre des commandes les plus avancées ou les plus «fantaisistes» que vous pouvez exécuter de cette façon sont des extensions Vim (par exemple,:bufdo
) et ne sont pas définies dans les spécifications POSIX pourex
, mais ces spécifications permettent un degré vraiment incroyable de puissance et de flexibilité dans le domaine non visuel. édition de texte (interactive ou automatisée).
La commande ci-dessus comporte plusieurs parties.
-s
active le mode silencieux pour préparer ex
utilisation par lots. (Supprimer les messages de sortie et. Al.)
-c
spécifie la commande à exécuter une fois le fichier (file.txt
, dans ce cas) est ouvert dans un tampon.
%
est un spécificateur d'adresse équivalent à 1,$
—il signifie que la commande suivante est appliquée à toutes les lignes du tampon.
s
est la commande de substitution que vous connaissez probablement déjà. Il est couramment utilisé vi
et présente des caractéristiques essentiellement identiques à la s
commande desed
, bien que certaines des fonctionnalités avancées d'expression régulière puissent varier selon la mise en œuvre. Dans ce cas, de ".com" à la fin de la ligne est remplacé par ".com".
La barre verticale sépare les commandes séquentielles à exécuter. Dans de nombreuses (la plupart) ex
implémentations, vous pouvez également utiliser une -c
option supplémentaire , comme ceci:
ex -sc '%s/\(\.com\).*/\1/' -c x file.txt
Cependant, cela n'est pas requis par POSIX.
La x
commande se ferme, après avoir écrit toutes les modifications apportées au fichier. Contrairement à wq
ce qui signifie «écrire et quitter», x
n'écrit dans le fichier que si le tampon a été modifié. Ainsi, si votre fichier n'est pas modifié, l'horodatage sera conservé.
.com
uniquement au lieu de tout supprimer après et en incluant le premier/
caractère? Et si vous aviez une URL commeen.wikipedia.org/wiki/Ubuntu
dans votre liste?