J'ai un fichier avec contenu
x
a
x
b
x
c
Je veux saluer la dernière occurrence,
x
c
quand j'essaye
sed -n "/x/,/b/p" file
il répertorie toutes les lignes, commençant de x
à c
.
Je ne sais pas si j'ai bien répondu à votre question, alors voici quelques clichés dans le noir:
Imprimer la dernière occurrence de x
(regex):
grep x file | tail -1
Alternativement:
tac file | grep -m1 x
Imprimer le fichier de la première ligne correspondante à la fin:
awk '/x/{flag = 1}; flag' file
Imprimer le fichier de la dernière ligne correspondante à la fin (imprime toutes les lignes en cas de non correspondance):
tac file | awk '!flag; /x/{flag = 1};' | tac
Cela pourrait fonctionner pour vous (GNU sed):
sed '/x/h;//!H;$!d;x' file
Enregistre le dernier x
et ce qui suit dans l'espace d'attente et l'imprime à la fin du fichier.
je ne sais pas comment le faire en utilisant sed
, mais vous pouvez essayer awk
awk '{a=a"\n"$0; if ($0 == "x"){ a=$0}} END{print a}' file
grep -A 1 x file | tail -n 2
-A 1
indique à grep d'imprimer une ligne après une ligne de correspondance
avec tail
vous obtenez les deux dernières lignes.
ou de manière inversée:
tac fail | grep -B 1 x -m1 | tac
Remarque: vous devez vous assurer que votre motif est suffisamment "solide" pour qu'il vous donne les bonnes lignes. c'est-à-dire en le joignant à ^
au début et $
à la fin.