111 222 333 444 555 666 777 888 999 000
3 Réponses :
Il suffit de définir un drapeau chaque fois que le motif est trouvé. À partir de ce moment, imprimez les lignes: ou aussi p> il recherche Ceci est un cas spécifique de Comment sélectionner des lignes entre deux modèles? quand il n'y a pas de tel deuxième modèle. p> p> modèle code> dans chaque ligne. Lorsqu'il est trouvé, la variable
p code> est définie sur 1. Le point difficile est que les lignes sont simplement imprimées lorsque
p> 0 code>, de sorte que les lignes suivantes seront imprimées. p>
Suivant code> pourrait être enregistré ...
awk 'p; / motif / {p = 1}' code>;)
Je dois dire que votre réponse d'origine est plus facile à lire et à comprendre. particulièrement si le script était long.
awk 'p; / motif / {p = 1} 'fichier'
Méfiez-vous que lorsque le motif ne se trouve pas du tout, cela supprime tout.
@Martinvonwittich vous avez raison. Pour éviter cela, vous pouvez lire deux fois le fichier: une fois pour voir si le motif est trouvé et définir un drapeau. Ensuite, pour l'imprimer complètement ou à partir du motif: awk 'fnr == nr {if (/ motif /) trouvé = 1; Suivant} p || !trouvé; / motif / {p = 1} 'Fichier de fichier code>
sed '0,/pattern/d' file
Oui. Sauf si modèle code> est trouvé en première ligne. Mieux commencer la plage dans
0 code>.
@Birei belle suggestion. !
Méfiez-vous que lorsque le motif ne se trouve pas du tout, cela supprime tout.
Un autre SED code> Solution:
Cela semble être la seule solution qui ne supprime pas tout lorsque le motif n'est pas trouvé.
Essayez de ne pas penser et spécifier des problèmes en termes de ce que vous souhaitez supprimer à partir d'un fichier, mais à la place de ce que vous souhaitez sélectionner dans un fichier - cela fait souvent une différence pour la lisibilité, la maintenabilité, etc. des solutions que vous ( et nous) montez avec votre problème.