[ Insertion éditoriale forte>: duplicaté possible de la même affiche question antérieure ?] hi, j'ai besoin d'extraire du fichier: p> en utilisant le Commande Grep, la ligne suivante: p> Comment la commande Grep devrait-elle ressembler? p> p>
11 Réponses :
ligne? Ou des lignes?
Essayez p> EDIT: strong> grep est orienté ligne. Vous allez devoir utiliser Perl, SED ou Awk pour effectuer la correspondance des motifs entre les lignes. P> BTW -E Dites à Grep que le REGEXP est prolongé RE. P> P>
Lignes. Mais qu'en est-il de construire une expression régulière qui sera utilisée par Egrep? Comment le nouveau caractère de ligne est représenté?
Nom de fichier 'deuxième \\ Nthird' 'secondaire code>
grep -E '(second|third)' /path/to/file egrep -w 'second|third' /path/to/file
Je ne comprends pas vraiment ce que vous voulez faire correspondre. Je n'utiliserais pas Grep, mais l'une des opérations suivantes:
tail -2 file # to get last two lines head -n +2 file # to get all but first line sed -e '2,3p;d' file # to get lines from second to third
Votre question Résumé «Bash Grep Newline», implique que vous voudriez correspondre à la séquence Étant donné que le Grep fonctionne sur "lignes" et ces deux lignes sont différentes, vous ne serez pas en mesure de le faire correspondre de cette façon. P> Donc, je l'ai divisé en plusieurs tâches: P > Vous faites correspondre la ligne contenant "seconde" et sortie la ligne qui a assorti et la ligne suivante: p>
Vous traduisez toutes les autres nouvelles dans la séquence qui est garantie pour ne pas se produire dans l'entrée. Je pense que le moyen le plus simple de le faire serait d'utiliser Perl: p>
Vous faites un grep sur ces lignes, cette fois recherchant une chaîne Vous repliez les séquences inutilisées dans les nouvelles lignes, SED pourrait être la plus simple: p>
donc la commande de tuyau résultante pour faire ce que vous voulez ressembler à ce que vous voulez ressembler à: p> pas le plus élégant de loin, mais devrait fonctionner. Je suis curieux de connaître de meilleures approches, cependant - il devrait y en avoir. P> p> secondaire \ Nthrird code> de caractères - c'est-à-dire. Quelque chose contenant nouvelle en informatique.
## inutilisée ## troisième code>: p>
Vous ne voulez tout simplement pas la ligne contenant "d'abord"? -v code> invertit les résultats du GREP.
$ echo -e "first\nsecond\nthird\n" | grep -v first
second
third
Je ne pense pas Si vous voulez simplement dépouiller la première ligne de n'importe quel fichier (pour généraliser votre question), j'utiliserais < fort> sed fort> à la place. p> Ceci enverra le contenu du fichier à la sortie standard avec la première ligne supprimée. P> alors que vous peut rediriger la sortie standard dans un autre fichier pour capturer les résultats. p> qui devrait le faire. p> Si vous devez utiliser grep < / forte> et ne veulent tout simplement pas afficher la ligne avec premier em> dessus, puis essayez ceci: p> en passant le Cependant, l'inconvénient est qu'un fichier avec plusieurs premier em> est de ne pas montrer ces autres lignes non plus et peut ne pas être le comportement que vous attendez. P > Pour déranger les résultats dans un nouveau fichier, essayez ceci: p> espère que cela aide. p> p>
Je pense que vous pouvez avoir vos deux derniers exemples à l'envers.
au lieu de grep code>, vous pouvez utiliser
pcregrep code> qui prend en charge les motifs multilignes
-m code> permet le motif pour correspondre à plus d'une ligne. p> p>
Vous voudrez peut-être utiliser \ s + code> à la place de
\ n code> en fonction des terminaisons dans le fichier (certains pourraient être
\ r \ n code>)
Vous pouvez utiliser
$ grep -1 third filename
J'aime Notnoop's Réponse , mais construire sur La réponse d'Andrewy (qui est meilleure pour ceux sans PCREGREP, mais trop compliqué), vous pouvez simplement faire:
RESULT=`grep -A1 -s -m1 '^\s*second\s*$' file | grep -s -B1 -m1 '^\s*third\s*$'`
grep -v '^first' filename Where the -v flag inverts the match.
grep -a1 "Deuxième" | grep -b1 "troisième" fonctionne bien et si vous avez plusieurs matchs, il se débarrassera même du délimiteur d'origine - correspondant p>
Voulez-vous dire cela littéralement ou voulez-vous dire que vous voulez la deuxième et la troisième ligne, peu importe le contenu qu'ils ont? En outre, est-ce votre devoir?
Pas mes devoirs, juste une tâche. Je ne sais pas exactement comment construire une expression régulière ici.
Ce que je veux, c'est construire une expression régulière qui contiendra un caractère nouveau.
Grep code> est intrinsèquement axé sur la ligne. Vous n'avez pas besoin d'une expression régulière pour correspondre à la chaîne littérale 'd'abord »ou« deuxième ». Permettez-moi de demander à nouveau: voulez-vous correspondre à ces mots exacts ou voulez-vous correspondre à ceci: la deuxième ligne + la troisième ligne (sans égard au contenu)? Si vous souhaitez faire correspondre deux lignes spécifiques, l'une des solutions de Liori serait meilleure que
grep code>. S'il vous plaît essayez d'expliquer ce que vous voulez plus clairement.
Je souhaite rechercher dans le fichier d'une séquence de lignes pour ex "Line1 \ nLine2".
Si vous souhaitez rechercher une séquence de lignes et que vous souhaitez ajouter des mots au fichier, alors
grep code> n'est pas le bon outil. Cela ressemble plus à un travail pour moi, mais à nouveau sans une meilleure description du vrai problème, il est impossible de vous aider. Veuillez éditer votre question et montrer (1) données raisonnablement réalistes et (2) une explication plus complète de ce que vous voulez faire avec le fichier.