2017-05-16 1 views
0

J'ai un fichier texte comme celui-ciExtrait de la première occurence de texte entre les 2 modèles

----PAT1---- 
textaa1 
textbb1 
textcc1 
....... 
----PAT2---- 
----PAT1---- 
textaa2 
textbb2 
textcc2 
....... 
----PAT2---- 

Je veux extraire le premier texte entre "----PAT1----" et "----PAT2----" icluding les deux modèles

Ainsi, la sortie sera:

----PAT1---- 
textaa1 
textbb1 
textcc1 
....... 
----PAT2---- 

Comment faire avec sed ou awk?

J'ai essayé ce qui suit, mais il ne fonctionne pas

sed -n '/PAT1/,/PAT2/p' file 

D'autres questions montrent comment extraire tous les modèles, mais ils ne sont pas indiquant comment extraire uniquement la première

+0

double possible de [Comment sélectionner des lignes entre deux motifs?] (Http://stackoverflow.com/questions/38972736/ how-to-select-lines-between-two-patterns) – Inian

+0

@Inian D'autres questions montrent comment extraire tous les motifs (Et je le sais), mais ils n'indiquent pas comment extraire seulement le premier – MOHAMED

+1

: https://unix.stackexchange.com/questions/180663/how-to-select-first-occur rence-between-two-patterns-including-them – tripleee

Répondre

2

Une awk possibilité serait être quelque chose comme

awk '/PAT1/ {f=1} /PAT2/ {print; exit} f' file 

Il serait plus compliqué d'exclure ce match, mais nous pourrions faire une approche similaire, où e que nous utilisons un indicateur pour décider ou non d'imprimer la ligne et utiliser les modèles pour activer ce drapeau:

awk 'BEGIN {f=1} /PAT1/ {if(first == 0) {f=0}; first=1} /PAT2/ {if(f == 0) {f=1; next}}' f' file 

Ce imprimerait toutes les lignes à l'exception du premier bloc de lignes entre les motifs, y compris les lignes de motif eux-mêmes .

+0

et si je veux le retirer du fichier et ne pas l'extraire? Ce que je dois faire ? – MOHAMED

+0

@MOHAMED J'ai mis à jour pour inclure la suppression de ces lignes –

+0

Merci beaucoup – MOHAMED