Garniture 3 derniers caractères d'une ligne SANS l'aide de sed, ou perl, etc

J'ai un script shell de la sortie de données comme ceci:

1234567890  *
1234567891  *

J'ai besoin de retirer SEULEMENT les trois derniers caractères " *". Je sais que je peux le faire via

(whatever) | sed 's/\(.*\)...//'

Mais je NE veux PAS utiliser sed pour des raisons de vitesse. Il sera toujours le même 3 derniers caractères.

Tout moyen rapide de nettoyage de la sortie?

  • vous êtes à partir de votre question avec une hypothèse incorrecte (qui sed vont vous ralentir).
  • pax - je crois que les expressions régulières prendre plus de temps que de simples opérations sur des chaînes de caractères. Je ne pense pas que je me trompe, mais n'hésitez pas à montrer le contraire...
  • Ah, un défi. J'aime les défis 🙂 Voir ma mise à jour. Réponse courte. Complexe REs (avec lookaheads et les trackbacks et tout ce genre de trucs) est plus lent que le code dédié. Mais la vôtre n'est pas un complexe de RÉ. La compilation de l'analyseur sera assez rapide, même par rapport à des code. Certes, la différence de temps ne sera pas pertinente pour quelque chose qui se passe une fois par heure (si il prend 0,4 secondes ou 0,8 secondes ne doit pas être un sujet de préoccupation).
  • Pouvez-vous dire autre chose sur les données? (sera-t-il toujours être 13 caractères par ligne?) Aussi quelle plateforme vous utiliser?
  • c'est un peu dur à accepter votre affirmation que sed va en quelque sorte de ne pas être assez rapide ... vous avez déjà déclaré que la sortie est à venir à partir d'un script shell. Il est pratiquement impossible pour les sed pour être le goulot d'étranglement dans un tel pipeline! En d'autres termes, si la vitesse est d'une telle préoccupation, alors vous pourriez obtenir plus d'avantages de se concentrer sur le reste de votre code.
  • En acceptant de 100% avec Zac, d'ailleurs, le seul moyen d'une expression régulière peut vous ralentir ici est de savoir si vous êtes en utilisant une POSIX NFA moteur ou la NFA moteur et vous n'avez pas de match. awk qui utilise un DFA avec une bonne regex sera pas vous ralentir.

InformationsquelleAutor RubiCon10 | 2010-07-24