#1 Le 15/03/2019, à 16:38
- L'Africain
(Résolu) Supprimer lignes dans fichier
Bonjour,
J'ai un fichier avec des parties comme ça:
</def></entryFree>
In 1Cr 1:42, Dison è Disan.
</def></entryFree>
Je voudrais scripter la suppression de la première ligne comme ça:
</def></entryFree>
Donc en gros après le script ça devrait ressembler à ça:
In 1Cr 1:42, Dison è Disan.
</def></entryFree>
Sachant que ce genre d'erreur arrive à ne nombreuses reprises dans le fichier en question.
Merci d'avance
Dernière modification par L'Africain (Le 15/03/2019, à 20:20)
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#2 Le 15/03/2019, à 16:58
- Watael
Re : (Résolu) Supprimer lignes dans fichier
salut,
que le fichier soit du XML n'est pas une information pertinente.
sed -i 1d fichier.xml
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#3 Le 15/03/2019, à 17:03
- L'Africain
Re : (Résolu) Supprimer lignes dans fichier
que le fichier soit du XML n'est pas une information pertinente.
J'ai modifié le titre mais je comprends pas ta commande, elle va seulement me supprimer ma ligne 1 qui n'est nullement concernée par le problème, les numéros de lignes à supprimer sont totalement aléatoire, d'où mon problème car sed ne lit pas correctement les \n dans la première partie de la commande du genre:
sed -ri 's/^(<\/def><\/entryFree>)\n(*.*)\n(<\/def><\/entryFree>)/\2\3/g' mon_fichier
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#4 Le 15/03/2019, à 19:02
- pingouinux
Re : (Résolu) Supprimer lignes dans fichier
Bonsoir,
Ceci ?
awk '{if(/<\/def><\/entryFree>/){if(c%2){print};c++}else print}' fichier
Ajouté :
Et pour s'assurer que la chaîne recherchée est seule sur sa ligne :
awk '{if(/^<\/def><\/entryFree>$/){if(c%2){print};c++}else print}' fichier
Dernière modification par pingouinux (Le 15/03/2019, à 19:05)
Hors ligne
#5 Le 15/03/2019, à 19:09
- L'Africain
Re : (Résolu) Supprimer lignes dans fichier
Oui merci pingouinux, ça semble fonctionne (je vérifie à fond bientôt) mais comment se fait-il que toutes les lignes avec
<\/def><\/entryFree>
Ne sont pas supprimée? C'est quoi l'option qui fait ça? Histoire que je pige bien la commande.
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#6 Le 15/03/2019, à 19:18
- Watael
Re : (Résolu) Supprimer lignes dans fichier
Je voudrais scripter la suppression de la première ligne
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#7 Le 15/03/2019, à 19:21
- melixgaro
Re : (Résolu) Supprimer lignes dans fichier
L'Africain a écrit :Je voudrais scripter la suppression de la première ligne
La première ligne du bloc montré (qui se trouve dans un fichier plus grand), pas la première ligne du fichier…
J'ai un fichier avec des parties comme ça:
Linux depuis ~2007. Xubuntu seulement.
Hors ligne
#8 Le 15/03/2019, à 19:35
- Watael
Re : (Résolu) Supprimer lignes dans fichier
alors il fallait donner un extrait plus représentatif du fichier, et la sortie correspondante attendue.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#9 Le 15/03/2019, à 19:40
- pingouinux
Re : (Résolu) Supprimer lignes dans fichier
Oui merci pingouinux, ça semble fonctionne (je vérifie à fond bientôt) mais comment se fait-il que toutes les lignes avec
<\/def><\/entryFree>
Ne sont pas supprimée? C'est quoi l'option qui fait ça? Histoire que je pige bien la commande.
C'est la variable c (initialisée à 0 part défaut), qui compte les lignes recherchées.
Chaque fois qu'une ligne est rencontrée, elle est imprimée si c est impair, et c est incrémentée de 1 à chaque fois.
Édité : Précision
Dernière modification par pingouinux (Le 16/03/2019, à 07:13)
Hors ligne
#10 Le 15/03/2019, à 20:19
- L'Africain
Re : (Résolu) Supprimer lignes dans fichier
@pinguinux, ok merci!
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne
#11 Le 16/03/2019, à 11:43
- Sciensous
Re : (Résolu) Supprimer lignes dans fichier
je précise au cas où: c%2 veut dire c modulo 2 , soit: c=0, 1 et si c=2, c prend la valeur 0
antiX 19 et 21 et Ubuntu 20.04 et 22.04
( sous LXDE et gnome-shell )
Hors ligne
#12 Le 16/03/2019, à 15:09
- LeoMajor
Re : (Résolu) Supprimer lignes dans fichier
bonjour,
variante getline, qui a de multiples usages
getline; (nextline) au lieu ... getline variable (affectation), par exemple
test.txt
<def>
cc
dd
</i>ee</i>
fin
</def></entryFree>
In 1Cr 1:42, Dison è Disan.
</def></entryFree>
aa
bb
</def></entryFree>
In 2Cr 2:42, Mison è Misan.
Out 4Br 2:52, Mistal
</def></entryFree>
</def>
awk -i inplace -v INPLACE_SUFFIX=.old '/<\/def><\/entryFree>/ {m++; if(m==1)getline; if(m==2)m=0}; {print}' test.txt
getline dans ce contexte, signifie "nextline"
"nouvelle écriture" test.txt =test.txt
<def>
cc
dd
</i>ee</i>
fin
In 1Cr 1:42, Dison è Disan.
</def></entryFree>
aa
bb
In 2Cr 2:42, Mison è Misan.
Out 4Br 2:52, Mistal
</def></entryFree>
</def>
"ancien" test.txt= test.txt.old
Hors ligne
#13 Le 16/03/2019, à 15:12
- L'Africain
Re : (Résolu) Supprimer lignes dans fichier
Merci à vous tous, sympa de donner des solutions même quand c'est résolu!
Ubuntu-Unity 24.04 Alienware X/Lubuntu-Mate
"Donne à celui qui te demande…" Mt 5,42
Hors ligne