Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 31/05/2016, à 18:59

lynn

[RÉSOLU] Insertion d'un texte dans un fichier.

Bonjour,

Quelques explications pour commencer:

J'ai une partition W$ qui me génère une entrée en double dans grub. Pour n'en garder qu'une seule, j'ajoute les lignes suivantes dans le fichier 30_os-prober situé dans /etc/grub.d

 #Added to remove Windows Recovery entry
  if [ "$LONGNAME" = "Windows 10 (loader)" ] && [ "${DEVICE}" = "/dev/sda2" ] ; then 
     continue
  fi
 #End Added

Je suis actuellement en train de me faire un petit script post installation d'Ubuntu avec mes configurations habituelles dont l'élément ci-dessus. Sachant que ces lignes sont insérées juste après ceci:

  if [ -z "${LONGNAME}" ] ; then
    LONGNAME="${LABEL}"
  fi

J'ai vu qu'avec sed, on peut récupérer un motif

sed -n '/LONGNAME="${LABEL}"/p' /etc/grub.d/30_os-prober

qui me donne

    LONGNAME="${LABEL}"

Ma question est comment faire pour dire à mon script d'insérer mon texte trois lignes après le motif pour que ça donne ça?

  ...

  if [ -z "${LONGNAME}" ] ; then
    LONGNAME="${LABEL}"
  fi

 #Added to remove Windows Recovery entry
  if [ "$LONGNAME" = "Windows 10 (loader)" ] && [ "${DEVICE}" = "/dev/sda2" ] ; then
     continue
  fi
 #End Added
  
  ...

Merci pour vos suggestions éclairées.

Dernière modification par lynn (Le 01/06/2016, à 16:56)


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#2 Le 31/05/2016, à 19:50

pingouinux

Re : [RÉSOLU] Insertion d'un texte dans un fichier.

Bonsoir,
Tu peux essayer ceci

sed '/LONGNAME="${LABEL}"/!b;{N;N};r fichier_contenant_le_texte' /etc/grub.d/30_os-prober

Hors ligne

#3 Le 31/05/2016, à 21:05

lynn

Re : [RÉSOLU] Insertion d'un texte dans un fichier.

Bonsoir pingouinux,

Ce que tu me proposes ne fonctionne pas chez moi... La commande se termine mais rien n'est modifié.

Une petite précision, le texte

 #Added to remove Windows Recovery entry
  if [ "$LONGNAME" = "Windows 10 (loader)" ] && [ "${DEVICE}" = "/dev/sda2" ] ; then
     continue
  fi
 #End Added

ne sera pas contenu dans un fichier séparé mais dans le script lui même. Un truc dans le genre:

echo " ""
 # Added to remove Windows Recovery
  if [ \"\$LONGNAME\" = \"Windows 10 (loader)\" ] && [ \"\${DEVICE}\" = \"$i\" ] ; then
     continue
  fi
 # End Added
"" " >> /etc/grub.d/30_os-prober

Tel quel, ça fonctionne mais ça ne place pas le texte au bon endroit...

Dernière modification par lynn (Le 08/06/2016, à 19:01)


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#4 Le 31/05/2016, à 21:10

lynn

Re : [RÉSOLU] Insertion d'un texte dans un fichier.

Apparemment, il manquait le -i à sed; Plus qu'à l'intégrer dans le script lui même. smile


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#5 Le 31/05/2016, à 22:50

pingouinux

Re : [RÉSOLU] Insertion d'un texte dans un fichier.

$ cat fichier
  ...

  if [ -z "${LONGNAME}" ] ; then
    LONGNAME="${LABEL}"
  fi


  ...
sed '/LONGNAME="${LABEL}"/!b;N;N;a \
 #Added to remove Windows Recovery entry \
  if [ "$LONGNAME" = "Windows 10 (loader)" ] && [ "${DEVICE}" = "/dev/sda2" ] ; then \
     continue \
  fi \
 #End Added' fichier

Résultat :

  ...

  if [ -z "${LONGNAME}" ] ; then
    LONGNAME="${LABEL}"
  fi

 #Added to remove Windows Recovery entry 
  if [ "$LONGNAME" = "Windows 10 (loader)" ] && [ "${DEVICE}" = "/dev/sda2" ] ; then 
     continue 
  fi 
 #End Added

  ...

Édité : Petite simplification

Dernière modification par pingouinux (Le 01/06/2016, à 06:59)

Hors ligne

#6 Le 01/06/2016, à 16:55

lynn

Re : [RÉSOLU] Insertion d'un texte dans un fichier.

Merci pingouinux, ta méthode fonctionne parfaitement. J'ai ajouté une variable pour déterminer la valeur de /dev/sd?? lors de l'exécution du script.

#!/bin/bash

WIN_DEV=$(fdisk -l|grep "exFAT"|sed -n 1p|cut -d" " -f1)

sed -i '/LONGNAME=\"\${LABEL}\"/!b;N;N;a \
 #Added to remove Windows Recovery entry \
  if [ \"\$LONGNAME\" = \"Windows 10 (loader)\" ] && [ \"\${DEVICE}\" = '\"$WIN_DEV\"' ] ; then \
     continue \
  fi \
 #End Added \

 ' /etc/grub.d/30_os-prober

Merci encore. smile

Correctif :  '\"$WIN_DEV\"' permet de conserver les " " et d'afficher "/dev/sdxx"

Dernière modification par lynn (Le 01/06/2016, à 22:12)


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne

#7 Le 01/06/2016, à 17:51

pingouinux

Re : [RÉSOLU] Insertion d'un texte dans un fichier.

Voici un équivalent plus simple pour la troisième ligne de ton script

WIN_DEV=$(fdisk -l|awk '/exFAT/{print $1;exit}')

Hors ligne

#8 Le 01/06/2016, à 18:10

lynn

Re : [RÉSOLU] Insertion d'un texte dans un fichier.

Merci pingouinux. Mais que ne fait-on pas avec awk..?! cool


«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»

Coluche

Hors ligne