#1 Le 02/12/2011, à 11:33
- Hizoka
[resolu] Remplacer une plage de texte par une autre
Bonjour,
je voudrais remplacer une plage de texte par une autre dans un fichier.
Exemple :
var=" * Super\n * Trop bien\n * ca passe"
fichier à modifier :
mkv-extractor-gui (4.6.6-0ppa5~oneiric) oneiric; urgency=low
* Petites modifications d'icones
* Remplacement de l'icone de selection par une coche
* Ajout d'un menu forçant la langue à utiliser
* Ajout du support des videos/audios pour les fichiers joints
-- Hizoka <hizo@free.fr> Wed, 23 Nov 2011 10:29:42 +0100
mkv-extractor-gui (4.6.2-0ppa1~oneiric) oneiric; urgency=low
* ...
nouveau fichier :
mkv-extractor-gui (4.6.6-0ppa5~oneiric) oneiric; urgency=low
* Super
* Trop bien
* ca passe
-- Hizoka <hizo@free.fr> Wed, 23 Nov 2011 10:29:42 +0100
mkv-extractor-gui (4.6.2-0ppa1~oneiric) oneiric; urgency=low
* ...
alors j'arrive à selectionner les lignes contenues entre les premiers espaces avec awk :
awk -v OCC=2 'BEGIN{ RS="" } NR==OCC'
mais je n'arrive pas à utiliser awk malgre mes efforts, trop dur...
une idée pour awk ? ou avec autre chose, le tout en bash.
merci
Dernière modification par Hizoka (Le 03/12/2011, à 02:33)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#2 Le 02/12/2011, à 12:45
- pingouinux
Re : [resolu] Remplacer une plage de texte par une autre
Bonjour,
Voici qui devrait convenir, en une seule ligne de awk :
awk -v OCC=2 -v var=" * Super\n * Trop bien\n * ca passe" 'BEGIN{ OLDRS=RS;RS="" } NR==OCC {printf("\n%s\n\n",var);RS=OLDRS} NR!=OCC' fichier
En ligne
#3 Le 02/12/2011, à 15:43
- Haleth
Re : [resolu] Remplacer une plage de texte par une autre
Avec sed :
sed s/origine/resultat/g
Ubuntu is an ancien African word which means "I can't configure Debian"
Because accessor & mutator are against encapsulation (one of OOP principles), good OOP-programmers do not use them. Obviously, procedural-devs do not. In fact, only ugly-devs are still using them.
Hors ligne
#4 Le 02/12/2011, à 16:55
- sputnick
Re : [resolu] Remplacer une plage de texte par une autre
Salut Hizoka san,
tu précise pas assez tes contraintes.
Si tu connait le "range" de lignes :
sed '3,6c\
* Super\
* Trop bien\
* ca passe\
' FICHIER
ou avec ed :
ed -s FICHIER <<EOF
3,6c
foo
bar
base
.
,p
EOF
Merci à geirha pour son aide.
Dernière modification par sputnick (Le 02/12/2011, à 17:00)
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#5 Le 03/12/2011, à 00:40
- Hizoka
Re : [resolu] Remplacer une plage de texte par une autre
sputnick => non je ne connais pas les lignes (trop facile sinon ), ni leur nombre.
je sais juste qu'ils sont placés entre les 2 premières lignes vides et que la 1ere ligne de texte est à la 3eme.
je ne connaissais pas ed.
Haleth => pas possible, sinon je l'aurais fait...
pingouinux => nickel !
juste un question, awk a-t-il une commande pour sauvegarder directement le fichier modifié ? ou faut il faire une redirection ?
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#6 Le 03/12/2011, à 00:47
- pingouinux
Re : [resolu] Remplacer une plage de texte par une autre
juste un question, awk a-t-il une commande pour sauvegarder directement le fichier modifié ? ou faut il faire une redirection ?
À ma connaissance, il faut rediriger la sortie sur un autre fichier.
En ligne
#7 Le 03/12/2011, à 01:45
- Mpok
Re : [resolu] Remplacer une plage de texte par une autre
pingouinux => nickel !
Comme souvent…
Hors ligne