#1 Le 21/03/2014, à 07:13
- Link_Octree
[RESOLU] Appliquer un remplacement sed sur une seule colonne
Salut,
J'ai le fichier structuré suivant 1.txt:
27ème journée 09/03/2012 - 20:00 ESTAC Troyes 0 - 1 Châteauroux
26ème journée 02/03/2012 - 19:00 Châteauroux 2 - 2 Stade de Reims
Je compte intégrer plus tard ce fichier dans une page html, pour celà je cherche à mettre en valeur les matchs où les résultats sont 2-2:
sed -i 's#2 - 2#<strong>2 - 2</strong>#g' 1.txt
Problème, cette commande impacte un autre champs que je ne voudrais pas changer:
27ème journée 09/03/2012 - 20:00 ESTAC Troyes 0 - 1 Châteauroux
Je souhaites donc restreindre ma commande sed seulement sur la colonne souhaitée, j'ai tenté de combiner cat, cut et sed avec des pipes mais sans succés jusque là...
cat 1.txt | cut -f4 -s | sed -i 's#0 - 0#<strong><font color="red">0 - 0</font></strong>#g' 1.txt
Pourriez-vous me proposer une solution fonctionelle proche du code ci-dessous svp ? Un code plus propre/intéligent/rapide existe sûrement mais si je ne suis pas en mesure de le comprendre pour l'adapter à d'autres projets, ce n'est pas ce que je recherche.
Merci d'avance !
Dernière modification par Link_Octree (Le 23/03/2014, à 13:35)
Hors ligne
#2 Le 21/03/2014, à 08:44
- Little Nooby
Re : [RESOLU] Appliquer un remplacement sed sur une seule colonne
Coucou,
À mon avis, tu te fatigues à réinventer la roue. Je te conseille de te tourner vers un format standard tel que le csv (http://fr.wikipedia.org/wiki/Comma-separated_values) qui te permettra de rendre ta base de donnée compréhensible pour pleins de logiciels (OpenOffice calc, matlab, Excel, ... pour ne citer que les plus connu). Évidemment, tu n'auras plus un fichier texte aussi joli mais si vraiment tu y tiens, tu pourras le générer très facilement à partir de ton fichier formaté en csv.
Si tu veux d'autres formats de base de donnée, tu peux chercher du sql (Sqlite par exemple, qui est très léger, géré nativement par android si je ne me trompe pas) ou encore en html ...
Pour répondre à ta question, tu pourrais adopter cette stratégie : cut les n premières colonnes correspondant à xxème journée jj/mm/aaaa - hh:mm pour qu'elle ne pollue pas ta recherche, récupérer le numéro des lignes correspondantes à ta recherches avec grep -n et de là je te laisse te débrouiller :-D.
Dernière modification par Little Nooby (Le 21/03/2014, à 08:47)
Hors ligne
#3 Le 21/03/2014, à 08:46
- credenhill
Re : [RESOLU] Appliquer un remplacement sed sur une seule colonne
hello
avec un tab avant et après et le g est inutile
sed -i 's#\t2 - 2\t#<strong>2 - 2</strong>#' 1.txt
Hors ligne
#4 Le 21/03/2014, à 09:31
- psyphi
Re : [RESOLU] Appliquer un remplacement sed sur une seule colonne
Je recommande la solution de credenhill car dans le cas d'un search and replace, sed est l'outil idéal.
Sache cependant que si tu dois faire des modifications plus spécifiques sur des colonnes, tu peux travailler avec awk.
awk -F'\t' '{if ($4=="2 - 2") print $1"\t"$2"\t"$3"\t<strong>"$4"</strong>\t"$5; else print $0}' 1.txt
27ème journée 09/03/2012 - 20:00 ESTAC Troyes 0 - 1 Châteauroux
26ème journée 02/03/2012 - 19:00 Châteauroux <strong>2 - 2</strong> Stade de Reims
Mon blog: http://blog.bores.fr
Mon wiki: http://bores.fr/wiki
Mes programmes libres: https://github.com/tbores
Hors ligne
#5 Le 21/03/2014, à 10:00
- ek0892
Re : [RESOLU] Appliquer un remplacement sed sur une seule colonne
sudo apt-get install rpl
rpl '2012 - 2' '2099 - 2' 1.txt ;
rpl '2 - 2' '<strong>2 - 2</strong>' 1.txt ;
rpl '2099 - 2' '2012 - 2' 1.txt
par contre si tu lances plusieurs fois tu risques d'avoir : <strong><strong>2 - 2</strong></strong> donc la solution consiste à les retirer avant :
rpl '<strong>2 - 2</strong>' '2 - 2' 1.txt ;
rpl '2012 - 2' '2099 - 2' 1.txt ;
rpl '2 - 2' '<strong>2 - 2</strong>' 1.txt ;
rpl '2099 - 2' '2012 - 2' 1.txt
et voila
Dernière modification par ek0892 (Le 21/03/2014, à 10:14)
Hors ligne
#6 Le 23/03/2014, à 13:34
- Link_Octree
Re : [RESOLU] Appliquer un remplacement sed sur une seule colonne
Merci à credenhill, je suis plutot parti sur ta solution, bien que celle de psyphi semble aussi intéressante, quand à rpl je connaissais pas du tout, merci ek0892 pour cette découverte
Hors ligne