#1 Le 31/05/2016, à 17: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, à 15:56)
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#2 Le 31/05/2016, à 18: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, à 20: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, à 18:01)
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#4 Le 31/05/2016, à 20: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.
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#5 Le 31/05/2016, à 21: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, à 05:59)
Hors ligne
#6 Le 01/06/2016, à 15: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.
Correctif : '\"$WIN_DEV\"' permet de conserver les " " et d'afficher "/dev/sdxx"
Dernière modification par lynn (Le 01/06/2016, à 21:12)
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne
#7 Le 01/06/2016, à 16: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, à 17:10
- lynn
Re : [RÉSOLU] Insertion d'un texte dans un fichier.
Merci pingouinux. Mais que ne fait-on pas avec awk..?!
«C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!»
Coluche
Hors ligne