Lire l'avant dernière ligne puis la dernière ligne d'un fichier

Résolu/Fermé
thierryR51 Messages postés 139 Date d'inscription dimanche 5 juillet 2015 Statut Membre Dernière intervention 22 juin 2021 - 26 févr. 2016 à 11:50
thierryR51 Messages postés 139 Date d'inscription dimanche 5 juillet 2015 Statut Membre Dernière intervention 22 juin 2021 - 26 févr. 2016 à 13:53
Bonjour,
Je voudrais lire un message envoyé (par mail) par un script de ma fabrication
L'avant derniere ligne me donne l'origine du message
La derniere est une commande.

Je lis le fichier:
commandes=$(tail -2 $MESSAGE ) ;


jusque là ça va.
C'est ensuite, pour lire chaque ligne dans ma variable que ça coince:
J'ai essayé sed mais ça ne marche pas:
origine=$(sed -n 1p "$commandes" ) ;

L'exécution du script bash me donne:
sed: impossible de lire  MaMaison 
: Aucun fichier ou dossier de ce type

Visiblement ça ne doit pas être la bonne commande.
Merci de votre aide.


3 réponses

zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 568
26 févr. 2016 à 12:01
Salut,

 origine=$(sed -n 1p <<< "$commandes") ;

1
Utilisateur anonyme
26 févr. 2016 à 12:22
salut,

également en bash,
fichier=TonFichier
{ read origine; read commande;} < <(sed -e '$!{h;d;}' -e '$H;x' $fichier)
echo "$origine"
echo "$commande"
1
zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 568
26 févr. 2016 à 12:26
Salut,

Ou dans un tableau ;-)

$ cat fich 
Bonjour,

Je voudrais lire un message envoyé (par mail) par un script de ma fabrication
L'avant derniere ligne me donne l'origine du message
La derniere est une commande.

$ mapfile -O 1 -t tab fich

$ echo ${tab[1]}
L'avant derniere ligne me donne l'origine du message

$ echo ${tab[2]}
La derniere est une commande.
0
Utilisateur anonyme > zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021
Modifié par qqchquicommenceparQ le 26/02/2016 à 12:41
hmm, il y a un problème dans ta commande.
tu as peut-être fait d'autres essais qui auront conservés la trace d'un tableau précédent, parce que telle quelle la commande ne peut pas fonctionner.
$ mapfile -t tab <"$fichier"
$ echo "${tab[-2]}"
L'avant derniere ligne me donne l'origine du message
$ echo "${tab[-1]}"
La derniere est une commande.
0
zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 568 > Utilisateur anonyme
26 févr. 2016 à 13:11
Oups ;-((

mapfile -O 1 -t tab < <(tail -2 fich)


Merci ;-)
0
thierryR51 Messages postés 139 Date d'inscription dimanche 5 juillet 2015 Statut Membre Dernière intervention 22 juin 2021 8
26 févr. 2016 à 12:48
C'est super zipe31. Ça fonctionne à merveille. Je ne comprends pas tous ces <<< mais ça marche.
0
zipe31 Messages postés 36317 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 568
26 févr. 2016 à 13:17
Je ne comprends pas tous ces <<< mais ça marche.
man bash (Redirection)


   Here Strings
A variant of here documents, the format is:

<<<word

The word undergoes brace expansion, tilde expansion, parameter and
variable expansion, command substitution, arithmetic expansion, and
quote removal. Pathname expansion and word splitting are not per‐
formed. The result is supplied as a single string to the command on
its standard input.
0
thierryR51 Messages postés 139 Date d'inscription dimanche 5 juillet 2015 Statut Membre Dernière intervention 22 juin 2021 8
26 févr. 2016 à 13:53
OK Merci... Je suis maintenant un peu plus intelligent !
0