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

Résolu
thierryR51 Messages postés 139 Date d'inscription   Statut Membre Dernière intervention   -  
thierryR51 Messages postés 139 Date d'inscription   Statut Membre Dernière intervention   -
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.


A voir également:

3 réponses

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Salut,

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

1
Utilisateur anonyme
 
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 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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 36402 Date d'inscription   Statut Contributeur Dernière intervention  
 
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 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430 > Utilisateur anonyme
 
Oups ;-((

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


Merci ;-)
0
thierryR51 Messages postés 139 Date d'inscription   Statut Membre Dernière intervention   8
 
C'est super zipe31. Ça fonctionne à merveille. Je ne comprends pas tous ces <<< mais ça marche.
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
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   Statut Membre Dernière intervention   8
 
OK Merci... Je suis maintenant un peu plus intelligent !
0