0
votes

Obtenez des lignes entre deux lignes exactes correspondant à la commande sed en shell

J'ai un fichier sous Linux, qui ont des données comme xxx

et je veux obtenir des lignes entre Line1 et Line4 I.e. Line3. J'ai utilisé après la commande Linux en shell. xxx

ceci me donne la sortie suivante xxx

Sortie ci-dessus est parce que SED recherche des lignes comme contient et non une correspondance de ligne exacte. Y a-t-il un moyen d'obtenir une chaîne entre la correspondance de la ligne d'extraction?


1 commentaires

Quelle version de sed utilisez-vous?


4 Réponses :


0
votes

Si je vous ai bien compris ce que vous recherchez, c'est quelque chose comme sed -n -e '/ ^ ligne \ (1 \ | 4 \ \) $ / p' .

Vous pouvez utiliser '^' pour dire que vous voulez que la recherche de recherche correspondre au début de la ligne d'un «$» pour correspondre à la fin de la ligne.


2 commentaires

Ravi de voir votre réponse rapide à ce sujet. Des exemples que j'ai partagés ici ne sont qu'un exemple. Car mes données réelles, il n'y a rien de tel que la ligne1 ou la ligne2. Ma question était la suivante: comment nous pouvons obtenir des lignes entre deux lignes exactes à l'aide de la commande SED?


@Navnath Désolé, j'ai mal compris votre question,



0
votes

essayez awk.

Lorsque vous spécifiez la plage en utilisant /../ ,/../, le match comprendra également les limites. Mais dans votre cas, vous n'en avez pas besoin, vous devez donc faire une petite manipulation. xxx


0 commentaires

1
votes

in SED Le ^ représente la ligne de départ, le $ représente la fin de la ligne. xxx

Votre SED est étrange, cette commande sed devrait émettre les lignes entre les motifs, y compris les motifs eux-mêmes. Quoi qu'il en soit, sous peu testé à TutorialSpoint .


0 commentaires

0
votes

Si vous ne voulez que entre em>, exclure le début et la fin, un moyen facile est (GNU SED): xxx pré>

démo: p>

awk '/^Line1$/{s=1;next}/^Line4$/{s=0}s'


0 commentaires