lnum=$(($(sed -n '/^---$/=' file | sed '$!d') +1)); sed -n "${lnum},$ p" file
Les premiers sed
numéros de ligne des sorties des lignes "---" ...
Le second sed
extrait le dernier numéro de la sortie du premier sed ...
Ajoutez 1 à ce numéro pour obtenir le début de votre bloc "ccc" ...
Le troisième sorties 'sed' du début du bloc "ccc" à EOF
Mise à jour (avec des informations modifiées sur les méthodes de Gilles)
Eh bien, je me demandais comment Glenn Jackman tac
se comporterait, alors j'ai testé les trois réponses (au moment de la rédaction) ... Le ou les fichiers de test contenaient chacun 1 million de lignes (de leurs propres numéros de ligne).
Toutes les réponses ont fait ce qui était attendu ...
Voici les temps ..
Gilles sed
(passage unique)
# real 0m0.470s
# user 0m0.448s
# sys 0m0.020s
Gilles awk
(passage unique)
# very slow, but my data had a very large data block which awk needed to cache.
Gilles en deux passes (première méthode)
# real 0m0.048s
# user 0m0.052s
# sys 0m0.008s
Gilles en deux passes (deuxième méthode) ... très rapide
# real 0m0.204s
# user 0m0.196s
# sys 0m0.008s
Gilles en deux passes (troisième méthode)
# real 0m0.774s
# user 0m0.688s
# sys 0m0.012s
Gilles 'gawk' (méthode RT) ... très rapide , mais ce n'est pas POSIX.
# real 0m0.221s
# user 0m0.200s
# sys 0m0.020s
glenn jackman ... très rapide , mais ce n'est pas POSIX.
# real 0m0.022s
# user 0m0.000s
# sys 0m0.036s
fred.bear
# real 0m0.464s
# user 0m0.432s
# sys 0m0.052s
Mackie Messer
# real 0m0.856s
# user 0m0.832s
# sys 0m0.028s
sed
fonctionne bien, mais je n'arrive pas à faire fonctionner l'awk
exemple; il se bloque ... et j'obtiens une erreur dans le 3ème exemple:cut -f ':' -t 1
... cut: option invalide - 't'