Supposons que j'ai une liste d'URL dans un fichier texte:
google.com/funny
unix.stackexchange.com/questions
isuckatunix.com/ireallydo
Je veux supprimer tout ce qui vient après «.com».
Résultats attendus:
google.com
unix.stackexchange.com
isuckatunix.com
j'ai essayé
sed 's/.com*//' file.txt
mais il a également supprimé .com
.
text-processing
sed
Koshur
la source
la source
.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?Réponses:
Pour supprimer explicitement tout ce qui vient après ".com", ajustez simplement votre solution sed existante pour remplacer ".com (n'importe quoi)" par ".com":
J'ai modifié votre regex pour échapper à la première période; sinon, cela aurait correspondu à quelque chose comme "thisiscommon.com/something".
Notez que vous souhaiterez peut-être ancrer davantage le modèle ".com" avec une barre oblique finale afin de ne pas supprimer accidentellement quelque chose comme "sub.com.domain.com/foo":
la source
Vous pouvez utiliser
awk
le séparateur de champs de (-F
) de la manière suivante:Explication:
Comme vous voulez supprimer toutes les choses après
.com
,-F '.com'
sépare la ligne avec.com
et neprint $1
donne la sortie que la partie précédente.com
. Donc,$1".com"
ajoute.com
et vous donne la sortie attendue.la source
/
comme FS et prendre le premier champ?acomercial.com/asdsad
Le meilleur outil pour l'édition de fichiers sur place non interactive est
ex
.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éparerex
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 à las
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: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é.la source
sed
le faux -n de Gnu . Il lit / écrit dans les tampons sur disque. Voyez par vous-même w /ex -r
et lapreserve
commande.preserve
commande?Manière python très rapide, simple et sale:
Exemple d'exécution
la source
.com
, il supprime simplement tout en commençant par le premier/
de la ligne. (qui est à mon avis encore la meilleure approche!).net
, dans d'autres approches, la partie qui vient après le domaine et l'extension ne serait pas supprimée, il est donc plus sûr de l'utiliser/
comme séparateur.