Lire l'avant dernière ligne puis la dernière ligne d'un fichier [Résolu/Fermé]

Signaler
Messages postés
135
Date d'inscription
dimanche 5 juillet 2015
Statut
Membre
Dernière intervention
25 mai 2019
-
Messages postés
135
Date d'inscription
dimanche 5 juillet 2015
Statut
Membre
Dernière intervention
25 mai 2019
-
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

Messages postés
36281
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
22 janvier 2021
5 857
Salut,

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

1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci


salut,

également en bash,
fichier=TonFichier
{ read origine; read commande;} < <(sed -e '$!{h;d;}' -e '$H;x' $fichier)
echo "$origine"
echo "$commande"
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci

Messages postés
36281
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
22 janvier 2021
5 857
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.
Utilisateur anonyme >
Messages postés
36281
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
22 janvier 2021

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.
Messages postés
36281
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
22 janvier 2021
5 857 > Utilisateur anonyme
Oups ;-((

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


Merci ;-)
Messages postés
135
Date d'inscription
dimanche 5 juillet 2015
Statut
Membre
Dernière intervention
25 mai 2019
7
C'est super zipe31. Ça fonctionne à merveille. Je ne comprends pas tous ces <<< mais ça marche.
Messages postés
36281
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
22 janvier 2021
5 857
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.
Messages postés
135
Date d'inscription
dimanche 5 juillet 2015
Statut
Membre
Dernière intervention
25 mai 2019
7
OK Merci... Je suis maintenant un peu plus intelligent !