#1 Le 27/02/2015, à 12:15
- Le Goss
[Résolu] bash: supprimer lignes vides dans une partie d'un fichier
Bonjour à tous,
Je cherche à supprimer les lignes vides d'un fichier de la 1ere ligne jusqu'à une suite de mot
Je m'y prend peut-être comme un manche, mais voilà où j'en suis:
cat fichier | sed '1,/bla bla/!d' | sed '/^$/d'
C'est "bon" sur le terminal, mais je voudrais l'appliquer au fichier sans supprimer le reste de son contenu.
Merci pour votre aide
Cordialement
Dernière modification par Le Goss (Le 27/02/2015, à 13:18)
Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags
Hors ligne
#2 Le 27/02/2015, à 13:06
- pingouinux
Re : [Résolu] bash: supprimer lignes vides dans une partie d'un fichier
Bonjour,
Essaye ceci
sed '1,/bla bla/!b;/^$/d' fichier
Hors ligne
#3 Le 27/02/2015, à 13:18
- Le Goss
Re : [Résolu] bash: supprimer lignes vides dans une partie d'un fichier
Super! j'ai bien pensé à cette ligne... mais sans le !b
Merci à toi!
Si je pose une question sur le forum, ce n'est pas par paresse ou pour faire faire "mes devoirs"; c'est par ignorance: j'ai 51 berges. Et, par principe, je préfère être traité d'ignare que de fainéant.
Samsung i7-3630QM CPU @ 2.40GHz × 8 - 64 bits - RAM 7,7 Gio - DD 976 Go - Bodhi 6.0.0 Ubuntu 20.04
Allergique au wysiwyg; traitement à vie: Lilypond - LaTeX - txt2tags
Hors ligne
#4 Le 27/02/2015, à 20:21
- Hizoka
Re : [Résolu] bash: supprimer lignes vides dans une partie d'un fichier
moi aussi je veux jouer
STOP="False"
while read ligne
do
if [[ "${STOP}" == "False" ]]
then
[[ $(grep "bla bla" <<< "${ligne}") ]] && STOP="True"
[[ "${ligne}" != "" ]] && echo "${ligne}" >> newfile.txt
else
echo "${ligne}" >> newfile.txt
fi
done < fichier.txt
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#5 Le 27/02/2015, à 20:46
- pingouinux
Re : [Résolu] bash: supprimer lignes vides dans une partie d'un fichier
@Hizoka : Ça marche aussi, mais tu peux simplifier un peu (au niveau de la variable STOP, du test avec grep, et de la redirection)
STOP=false
while read ligne
do
if ! $STOP
then
grep -q "bla bla" <<< "${ligne}" && STOP=true
[[ "${ligne}" ]] && echo "${ligne}"
else
echo "${ligne}"
fi
done <fichier.txt >newfile.txt
Hors ligne
#6 Le 28/02/2015, à 00:57
- Hizoka
Re : [Résolu] bash: supprimer lignes vides dans une partie d'un fichier
pas trop fan pour le grep, je trouve ca moins lisible
pour la variable, c'est a cause de python, on ne peut pas faire ça (j'ai du changer mes habitudes)
pour la redirection, j'y pense jamais à le mettre dans la boucle
merci.
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#7 Le 28/02/2015, à 08:11
- pingouinux
Re : [Résolu] bash: supprimer lignes vides dans une partie d'un fichier
[HS]
pour la variable, c'est a cause de python, on ne peut pas faire ça
Je ne vois pas ce que tu veux dire. As-tu un exemple ?
[/HS]
Hors ligne
#8 Le 28/02/2015, à 11:54
- Hizoka
Re : [Résolu] bash: supprimer lignes vides dans une partie d'un fichier
merde, j'ai mal lu... je pensais que tu n'avais pas initialisé la variable STOP, ce qui est possible en bash mais pas en python.
bash :
if [[ -n "${NEW_VAR}" ]]
then
echo "NEW_VAR n'est pas vide"
else
echo "NEW_VAR est vide"
fi
=>
NEW_VAR est vide
python :
if NEW_VAR == "":
print("NEW_VAR n'est pas vide")
else:
print("NEW_VAR est vide")
=>
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'NEW_VAR' is not defined
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne