Si votre grep
n'a pas -A
, -B
et -C
, cette commande sed
peut travailler pour vous:
sed -n '1bb;:a;/PATTERN/{h;n;p;H;g;bb};N;//p;:b;99,$D;ba' inputfile > outputfile
où PATTERN
est le Regula r expression votre recherche et 99
est un plus grand que le nombre de lignes de contexte que vous voulez (équivalent à -C 98
).
Il fonctionne en gardant une fenêtre de lignes en mémoire et lorsque l'expression régulière correspond, les lignes capturées sont sorties.
Si votre sed
n'aime pas des points-virgules et préfère -e
, cette version peut travailler pour vous:
sed -n -e '1bb' -e ':a' -e '/PATTERN/{h' -e 'n' -e 'p' -e 'H' -e 'g' -e 'bb}' -e 'N' -e '//p' -e ':b' -e '99,$D' -e 'ba' inputfile > outputfile
Pour votre sortie de plage de ligne, cela fonctionne et se terminera un peu plus rapidement s'il y a grand nombre de lignes après la fin de la gamme:
sed -n '100000,20000p;q' inputfile > outputfile
ou
sed -n -e '100000,20000p' -e 'q' inputfile > outputfile
Si vous n'êtes pas au courant, il existe un site de questions-réponses unix/linux: http://unix.stackexchange.com/ –
Le site super-utilisateur est une autre alternative. –
Et il y a un très bon site appelé StackOverflow pour lequel c'est une question parfaitement adaptée! –