Ma commande sed est,
sed '/(.*:)/d' <<< 'abcd:bcde:cdeaf'
Il doit revenir,
bcde:cdeaf
(c'est-à-dire) tous les caractères avant le premier deux-points de la ligne et le deux-points lui-même doivent être supprimés.
Mais cela ne supprime rien.
Ma confusion provient principalement de,
1) Faut-il échapper les parens pour la correspondance des motifs à l'intérieur des regex-es sed?
2) Dans les deux cas (avec échappement / sans escpaing), cela ne fonctionne pas. J'ai essayé,
sed -E '/\\(.*:\\)/d' <<< 'abcd:bcde'
sed 's/[^:]*://'
. Et vousd
n'effacez pas la ligne d'entrée, d'ailleurs, vous la modifiez avec unes///
commande d'ubstitution. Vous devez remplacer le premier bit non-colon et le colon qui le suit par rien du tout.printf "%s\n" "${line#*:}"
...while read line
qui obtient le$line
,sed
devrait probablement être préféré.Réponses:
Le premier
^
signifie le début de la ligne. C'est[^:]
juste la seule façon dont je sais écrire pas un deux-points . L'*
après le colon signifie un certain nombre de choses juste devant moi (dans ce cas, le non-colon). Enfin, le:
sélectionne les deux points.En d'autres termes, sélectionnez le début de la ligne, un nombre quelconque de choses qui ne sont pas des deux points et le premier deux-points.
Le
//g
moyen supprime chaque instance correspondante.la source
^
ancrer votre match, sauf que vous ajoutez également ung
drapeau global. il ne peut y avoir qu'une seule première occurrence d'un motif, et donc leg
drapeau lobal ne supprime pas tous les[^:]*:
motifs d'une ligne, comme il le ferait si vous ne l'^
ancrez pas. plutôt que de compliquer l'expression régulière avec deux indicateurs inutiles qui ne servent qu'à déséquilibrer l'un l'autre, vous pouvez simplement les laisser de côté, c'est ce que la version éditée de cette réponse a démontré avant de l'annuler. pourquoi vous insisteriez pour diffuser de mauvaises informations, je ne sais pas, mais cela en fait une mauvaise réponse.sed
compétences. Je suis nouveaused
et je ne suis pas encore à l'aise de m'éloigner de la syntaxe très limitée que j'ai choisie jusqu'à présent. Celased
(heh), je pense que ma réponse résout le problème d'OP même si ce n'est pas la réponse optimale (c'est-à-dire votre). Il s'agit de Stack Exchange, pas de Wikipedia, alors corrigez-moi si je me trompe, mais si vous connaissez une meilleure réponse, vous devez la publier afin que les gens puissent voir la variété des approches et les comparer. Veuillez ne pas transformer ma réponse en votre réponse avec la fonction d' édition .Pour fonctionner avec des colonnes, il y a
cut
:faire de même
Et autre version avec
sed
(plus rapide pour le big data):Et plutôt exotique dans
bash
ou
ou
la source
sed 's/[^:]*://'