Eh bien, j'ai un fichier test.txt Je veux extraire des cordes qui ont un espace après eux. J'ai utilisé après l'expression et cela a fonctionné p> sa sortie est p> mais problème est que grep imprime toutes les cordes qui ont obtenu de l'espace après eux, où je le souhaite d'arrêter après la première correspondance sur une ligne, puis passez à la deuxième ligne. P> Quelle expression devrais-je utiliser ici, afin de le faire arrêter après la première correspondance et de déplacer à la ligne suivante? p> Ce problème peut être résolu avec GAWK ou un autre outil, mais j'apprécierai une solution qui utilise le grep uniquement. P> edit forte>
J'utilise GNU Grep 2.5.1 sur un système Linux, si cela est pertinent. P> Avec l'aide des réponses données ci-dessous, j'ai essayé ma chance avec p> Et les deux me donnaient des réponses correctes. P> maintenant, ce qui me surprend est que j'ai essayé d'utiliser p> comme suggéré ICI mais n'a pas eu la bonne réponse.
Voici la sortie sur mon terminal P> mais commente de Richiehindle et de Adrian Pronk, montre qu'ils ont obtenu une sortie correcte sur leurs systèmes. Toute personne ayant une idée de savoir pourquoi je ne reçois pas le même résultat sur mon système. Une idée? Toute aide sera appréciée. P> Modifier strong> p> Eh bien, il semble que Grep 2.5.1 ait un bug à cause de laquelle ma sortie n'était pas correcte. J'ai installé Grep 2.5.4, maintenant, cela fonctionne correctement. S'il vous plaît voir
4 Réponses :
Si vous êtes sûr de ne pas avoir de gros espace, ajoutez un ^ code> pour correspondre uniquement au début d'une ligne, puis modifiez le
* code> sur un
+ code> pour correspondre uniquement lorsque vous avez un ou plusieurs caractères alphanumériques. (Cela signifie ajouter
-e code> pour utiliser des expressions régulières étendues).
grep -Eo "^[[:alnum:]]+[[:blank:]]" test.txt
J'ai copié votre commande à mon terminal mais j'ai obtenu le même résultat.
@ Andrew-Dufresne: Y a-t-il quelque chose de bizarre sur votre fichier texte? Essayez OD -C Test.txt CODE> Est-ce que cela affiche les caractères que vous attendiez?
@Richiehindle: Merci pour vos réponses rapides, je l'apprécie vraiment. J'ai exécuté la commande et j'ai reçu les mêmes personnages que dans le test.txt
J'ai essayé ceci en utilisant GNU Grep 2.5.3 et il produit la sortie que j'attendais: ODSDDODDDF112
@Richiehindle et @Adrian Pronk: Cette fois, j'ai essayé grep -o ^ [[[: alnum:]] * test.txt et cela fonctionnait correctement. Merci beaucoup.
@Richiehindle et @adrian Pronk: avec Grep 2.5.4, votre expression a fonctionné. Grep 2.5.1 a un peu de bogue. Merci pour votre temps et votre aide
Malheureusement, cela ne répond pas à la question de savoir comment faire de l'arrêt Grep après le premier match. Grep continuera à filtrer toutes les entrées sans arrêter et peut potentiellement assortir quelque chose de la poubelle ...
grep -oe "^[^ ]* " test.txt
J'ai collé votre commande et obtenu le même résultat que j'ai plus tôt.
Vous avez raison. Ma version 2.5.1 Grep était le coupable. Installé 2.5.4 et votre expression travaillée. Merci beaucoup Bryanh. J'apprécie ton aide.
Si nous voulons extraire toute entrée significative avant les ordures et s'arrêter en réalité sur la première correspondance, alors Exemple: p> -b num, --be-context = Num code> option peut être utile pour "imprimer des lignes numériques de contexte de premier plan Avant de faire correspondre des lignes ".
Comme le questionneur découvert, il s'agit d'un bug dans les versions de GNU Grep avant 2.5.3. Le bogue permet à un caret correspond à une correspondance après la fin d'une correspondance précédente, pas seulement au début de la ligne. P>
Ce bogue est toujours présent dans d'autres versions de Grep, par exemple dans Mac OS X 10.9.4. P>
Il n'y a pas de solution de contournement universelle, mais dans certains exemples, comme des non-espaces suivis d'un espace, vous pouvez souvent obtenir le comportement souhaité en laissant le délimiteur. C'est la recherche de '[^] *' code> plutôt que
'[^] *' code>. P>.
Poster cela comme une réponse afin que ces informations soient plus faciles à trouver.