je vis deComment utiliser sed pour renvoyer quelque chose de la première ligne qui correspond et quitte tôt?
How to use sed to replace only the first occurrence in a file?
Comment faire plus de ce que je veux:
sed -n '0,/.*\(something\).*/s//\1/p'
ce trouve le premier match de quelque chose et il extrait (bien sûr, mon exemple réel est plus complexe) . Je sais que sed a une commande 'quit' qui le fera s'arrêter tôt, mais je ne sais pas comment combiner le 'q' avec la ligne ci-dessus pour obtenir le comportement désiré.
J'ai essayé de remplacer le 'p' par {p; q;} comme je l'ai vu dans certains exemples, mais cela ne marche clairement pas.
Pouvez-vous montrer plus de ce que vous obtenez et ce que vous voulez et comment ils diffèrent? J'ai fait 'echo -e" aaa 111 aaa \ nbbb 111 bbb "| sed -n '0, /. * \ (111 \). */S // \ 1/p'' et j'ai obtenu un" 111 ". Ensuite, j'ai fait 'echo -e" aaa 111 aaa \ nbbb 111 bbb "| sed -n '0,/\ (. * \ (111 \). * \)/S // \ 1/p'' pour montrer le ligne complète pour s'assurer de ce qu'il obtenait et il sort "aaa 111 aaa" qui est ce que je m'attendais. Notez que je n'utilise pas de 'q'. Comment ça "ne fonctionne pas" pour vous. –
Votre méthode génère la sortie correcte, mais elle continue à traiter le fichier entier même s'il n'y a plus de travail à faire, ce qui est horrible pour les fichiers géants ou lorsqu'ils sont utilisés dans un pipeline.Mon cas d'utilisation spécifique était de trouver via 'git log' sur un arbre importé git-p4 qui utilisait la branche perforce pour le dernier commit. git log (quand il est appelé sans -n enregistrera tous les commit qui se sont produits (des centaines de milliers pour moi) Nous ne pouvons pas savoir a priori quelle valeur donner à git pour '-n.' Ma solution était: git log | sed -n '0, /. * \ [git-p4:. * \/\/dépôt \/blah \/\ ([^ \ /] * \) \ /.*/ s // \ 1/p;/\ [git-p4/q ' – nosatalian