-1
votes

Remplacer la première occurrence d'un côlon avec tab

Une ligne peut avoir 100 colons, mais je veux seulement que le premier côlon sur chaque ligne remplacée par un onglet.

Exemple de données d'entrée (différenciera beaucoup). P>

5b33b9d0a57ff17839bdce76acdd6bcd    ::diq23hnjr432ufjn0o0:243r:3rwg:bob@bob.de
5b33b9d0a57ff17839bdce76acdd6bcd    3432rfwediq23hnjr432ufjn0o0:243r:3rwg:bob@bob.de


0 commentaires

3 Réponses :


2
votes

Essayez la recherche et remplacez ci-dessous, dans le mode Regex: xxx

démo

explication du motif xxx

alors, nous remplaçons par les premier et second groupes de capture, séparé par un onglet.


8 commentaires

Vous êtes un génie, cette réponse est parfaitement bonne pour moi. Semble travailler super, merci!


Tim, avez-vous besoin de capturer quelque chose après le : ? Si vous quittez cela et simplement remplacer par 1 \ t , ça ne fonctionnera pas aussi?


@paxdiablo Vous avez raison, je l'enverrai un peu. Pas que ma réponse soit mal , juste que nous n'avons pas vraiment besoin de capturer la deuxième partie.


Ne suggérait pas que c'était faux, ça marche aussi bien comme ça. C'est juste que ma nature OCD m'a demandé de souligner que pourrait plus simple. Les personnes normales peuvent avoir moins d'envie de le faire :-)


Hey désolé mon idiocy, mais je me demande simplement comment puis-je modifier cette regex afin qu'elle supprime la dernière occurrence d'un colon avec un onglet?


Trouver: : ([^:] *) $ et remplacer: \ t $ 1


Cela souligne également les données après le dernier côlon (que je ne veux pas arriver) Seul le côlon est ce que je veux. Désolé d'être une douleur lol


Désolé, je n'ai pas vu votre commentaire édité mis à jour de 8mins il y a 8 minutes, fonctionne bien. Merci encore votre génie



0
votes

Cela dépend de votre moteur de regex (malheureusement, il n'y a pas un moteur de regex em> utilisé partout em>). Probablement la solution la plus portable em> est quelque chose dans le sens de:

>> echo 'This is : hello : an example' | sed 's/:/\t/'
This is          hello : an example


0 commentaires

0
votes

Étant donné que vous souhaitez modifier des valeurs uniquement jusqu'à la première : code>, vous pouvez simplement correspondre à la valeur jusqu'à la première : code> Colon, puis utilisez la référence arrière au groupe capturé et remplacez-le avec 1 \ t code> pour obtenir la sortie souhaitée Vous pouvez utiliser

/^([^:]*):/
  • ^ code> - début de chaîne li>
  • ([^:] *) code> - correspond à quoi que ce soit, sauf : code> zéro ou plus de temps li>
  • : code> - correspondance : code> li> ul>

    remplacer par 1 \ t code> p>

    Démo de regex code> p>

    côté de la lettre: - em> strong> Si vous voulez au moins un personnage doit être là Avant : code> que vous pouvez modifier quantifier à partir de * code> sur + p> p> p> p>


4 commentaires

Un autre Quickie, je pense que vous aurez peut-être besoin d'un groupe de capture pour arrêter le colon dans la substitution. Comme cela se trouve maintenant, il semble insérer un onglet après le premier côlon plutôt que de le remplacer.


@paxdiablo mybad, je me suis confus avec la première sortie souhaitée, mise à jour, merci mate :)


@Ticimbiegeleisen mais regardant la lunette ne capture pas de caractère, donc il persistera toujours


Vous avez raison +1, ce que vous avez donné est probablement le moyen le plus maigre de faire cela.