Question

J'essaie de faire exécuter la commande pour extraire une plage de dates d'un fichier et les imprimer

ex: sed -ne '/ ^ 2009-08-20 /, / ^ 2009-08-26 / p'

Pourtant, le fichier contient plusieurs occurrences du 2009-08-26, je souhaite qu’elles soient toutes renvoyées, mais elle ne renvoie que la première. Est-il possible d'avoir TOUT le retour?

Merci!

Était-ce utile?

La solution

sed -ne '/ ^ 2009-08-20 /, / ^ 2009-08-26 / b e; / ^ 2009-08-26 / b e; d;: e p'

Pour expliquer: "e" est une étiquette et si vous êtes dans la plage, vous accédez à cette étiquette. Vous donnez une seconde chance et vous vérifiez si c'est la fin de la plage. Sinon, supprimez la ligne.

Autres conseils

La raison pour laquelle il ne renvoie que la première correspondance de la date de fin est qu’une plage va de la première correspondance du premier motif à la première correspondance du deuxième motif (inclus) et qu’elle cesse ensuite d’imprimer jusqu’à ce que le premier motif apparaisse. encore. Si vous n’avez pas de problème à écrire le deuxième motif trois fois, vous pouvez utiliser

sed -ne '/^2009-08-20/,/^2009-08-26/{/^2009-08-26/!p};/^2009-08-26/p'

qui imprimera une ligne si elle se situe entre la date de début (incluse) et la date de fin (exclusive) - voilà ce que! fait) ou s’il commence par la date de fin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top