2010-10-08 12 views
2

Je veux obtenir les lignes d'un fichier de la ligne qui contient la dernière occurrence d'un mot donné.Unix Sed pour obtenir des lignes d'une dernière occurrence d'un mot donné

Ex:

Certes, il y a eu quelques changements dans
l'intrigue. Dans l'original,
Kane a essayé d'acheter de haute politique
pour lui-même. Dans la nouvelle version
, il ne fait que mettre des politiciens sur sa liste de paie.

Si je donne "Dans" je besoin

bureau pour lui-même. Dans la nouvelle version
, il ne fait que mettre des politiciens sur sa liste de paie.

+0

Vous devez formater votre exemple avec des sauts de ligne correcte, en utilisant le formatage « code » , sinon il n'est pas possible de comprendre ce que vous voulez. – enzotib

Répondre

1

Essayez:

grep 'yourWord' yourFile.txt | tail -n1 

Ou avec sed:

sed -n '/yourWord/{$p}' yourFile.txt 
+0

En fait j'ai besoin de tout le texte qui se trouve sous la ligne où le motif correspond à @ last –

0
$ word="In" 
$ awk -vw="$word" '{s=s$0}END{ m=split(s,str,w); print w str[m]}' file 
In the new version, he just puts politicians on his payroll. 

Je ne comprends pas pourquoi il y a "bureau pour lui-même." bien que.

+0

C'est juste une erreur de format. Pardon. Merci pour la réponse ... –

0

Cela devrait fonctionner:

En un paquebot:

patt=In 
sed -nr "/$patt/!b;:a;\$!N;/\n.*$patt/{h;s/\n[^\n]*\$//;g;s/^.*\n//};\$!ba;p" inputfile 

Si votre sed nécessite -e:

patt=In 
sed -nr -e "/$patt/!b" -e ":a" -e "\$!N" -e "/\n.*$patt/{h" -e "s/\n[^\n]*\$//" -e "g" -e "s/^.*\n//}" -e "\$!ba" -e "p" inputfile 

Sur des lignes séparées:

patt=In 
sed -nr " 
    /$patt/!b 
    :a 
    \$!N 
    /\n.*$patt/{ 
    h 
    s/\n[^\n]*\$// 
    g 
    s/^.*\n// 
    } 
    \$!ba 
    p' inputfile 
0

I c une impression de la 4ème ligne et à la fin de la ligne ne

Ma commande est

sed -n « 4, $ p » fichier