comment enlever le caractère tabulation dans une variable
9 réponses
Rodolphe Mosca
Bonjour,
J'ai un fichier que je traite sous bash
j'extrais des lignes avec grep du fichier, mais elles debutent par des
tabulations
je veux enlever les caractères tabulations qui commencent la variable $toto
je voudrais un truc du genre :
toto=${toto##\t} mais il reconnais pas \t :-(
j'ai essayé avec \x009, pareil, il ne veut pas...
soyez indulgents, c'est mon premier post sur la liste ;-)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Laurent Wacrenier
Rodolphe Mosca écrit:
j'extrais des lignes avec grep du fichier, mais elles debutent par des tabulations je veux enlever les caractères tabulations qui commencent la variable $toto
j'extrais des lignes avec grep du fichier, mais elles debutent par des
tabulations
je veux enlever les caractères tabulations qui commencent la variable $toto
j'extrais des lignes avec grep du fichier, mais elles debutent par des tabulations je veux enlever les caractères tabulations qui commencent la variable $toto
Utilise sed et non grep.
Benoit Izac
Bonjour,
le 04/06/2004 à 14:55, Rodolphe Mosca a écrit dans le message <40c0713e$0$308$ :
J'ai un fichier que je traite sous bash
j'extrais des lignes avec grep du fichier, mais elles debutent par des tabulations je veux enlever les caractères tabulations qui commencent la variable $toto
je voudrais un truc du genre : toto=${toto##t} mais il reconnais pas t :-( j'ai essayé avec x009, pareil, il ne veut pas...
toto=${toto##t}
-- Benoit Izac
Bonjour,
le 04/06/2004 à 14:55, Rodolphe Mosca a écrit
dans le message <40c0713e$0$308$7a628cd7@news.club-internet.fr> :
J'ai un fichier que je traite sous bash
j'extrais des lignes avec grep du fichier, mais elles debutent par des
tabulations
je veux enlever les caractères tabulations qui commencent la variable $toto
je voudrais un truc du genre :
toto=${toto##t} mais il reconnais pas t :-(
j'ai essayé avec x009, pareil, il ne veut pas...
le 04/06/2004 à 14:55, Rodolphe Mosca a écrit dans le message <40c0713e$0$308$ :
J'ai un fichier que je traite sous bash
j'extrais des lignes avec grep du fichier, mais elles debutent par des tabulations je veux enlever les caractères tabulations qui commencent la variable $toto
je voudrais un truc du genre : toto=${toto##t} mais il reconnais pas t :-( j'ai essayé avec x009, pareil, il ne veut pas...
toto=${toto##t}
-- Benoit Izac
David LE BOURGEOIS
Bonjour,
Bonjour.
J'ai un fichier que je traite sous bash
j'extrais des lignes avec grep du fichier, mais elles debutent par des tabulations je veux enlever les caractères tabulations qui commencent la variable $toto
Que vient faire la variable $toto ? Est-il possible d'avoir un bout de code, pour situer le contexte ?
je voudrais un truc du genre : toto=${toto##t} mais il reconnais pas t :-(
Pour le caractère tabulation, pourquoi ne pas utiliser la touche tabulation du clavier ?
~ $ foo=" bar" ~ $ echo "${foo## }" bar
j'ai essayé avec x009, pareil, il ne veut pas...
Si j'ai bien compris, il faut rechercher le motif dans un fichier, et lui supprimer ses tabulations éventuelles de début. Alors je dirai :
sed 's/^ *//;/MOTIF/p;d' FICHIER
Ou plus efficace :
perl -ne 'if(/MOTIF/){s/^t*//;print}' FICHIER
soyez indulgents, c'est mon premier post sur la liste ;-)
Les pingouins ne mordent pas.
A bientôt.
-- David LE BOURGEOIS
Bonjour,
Bonjour.
J'ai un fichier que je traite sous bash
j'extrais des lignes avec grep du fichier, mais elles debutent par des
tabulations
je veux enlever les caractères tabulations qui commencent la variable $toto
Que vient faire la variable $toto ?
Est-il possible d'avoir un bout de code, pour situer le contexte ?
je voudrais un truc du genre :
toto=${toto##t} mais il reconnais pas t :-(
Pour le caractère tabulation, pourquoi ne pas utiliser la touche
tabulation du clavier ?
j'extrais des lignes avec grep du fichier, mais elles debutent par des tabulations je veux enlever les caractères tabulations qui commencent la variable $toto
Que vient faire la variable $toto ? Est-il possible d'avoir un bout de code, pour situer le contexte ?
je voudrais un truc du genre : toto=${toto##t} mais il reconnais pas t :-(
Pour le caractère tabulation, pourquoi ne pas utiliser la touche tabulation du clavier ?
~ $ foo=" bar" ~ $ echo "${foo## }" bar
j'ai essayé avec x009, pareil, il ne veut pas...
Si j'ai bien compris, il faut rechercher le motif dans un fichier, et lui supprimer ses tabulations éventuelles de début. Alors je dirai :
sed 's/^ *//;/MOTIF/p;d' FICHIER
Ou plus efficace :
perl -ne 'if(/MOTIF/){s/^t*//;print}' FICHIER
soyez indulgents, c'est mon premier post sur la liste ;-)
Les pingouins ne mordent pas.
A bientôt.
-- David LE BOURGEOIS
Laurent Wacrenier
David LE BOURGEOIS écrit:
Ou plus efficace :
perl -ne 'if(/MOTIF/){s/^t*//;print}' FICHIER
perl -pe 's/^t*// if /MOTIF/'
David LE BOURGEOIS <this.address@is.invalid> écrit:
Ha ben j'ai trouvé ! il fallait juste mettre * devant... j'ai donc : album=${album##*(tab)} et ca fonctionne... ouf
tu aurais pu faire aussi album=`echo $album | tr -d 't'`
Rodolphe Mosca
On 2004-06-04 15:51:42 +0200, David LE BOURGEOIS said:
Bonjour,
Bonjour.
J'ai un fichier que je traite sous bash
j'extrais des lignes avec grep du fichier, mais elles debutent par des tabulations je veux enlever les caractères tabulations qui commencent la variable $toto
Que vient faire la variable $toto ? Est-il possible d'avoir un bout de code, pour situer le contexte ?
je voudrais un truc du genre : toto=${toto##t} mais il reconnais pas t :-(
Pour le caractère tabulation, pourquoi ne pas utiliser la touche tabulation du clavier ?
~ $ foo=" bar" ~ $ echo "${foo## }" bar
j'ai essayé avec x009, pareil, il ne veut pas...
Si j'ai bien compris, il faut rechercher le motif dans un fichier, et lui supprimer ses tabulations éventuelles de début. Alors je dirai :
sed 's/^ *//;/MOTIF/p;d' FICHIER
Ou plus efficace :
perl -ne 'if(/MOTIF/){s/^t*//;print}' FICHIER
soyez indulgents, c'est mon premier post sur la liste ;-)
Les pingouins ne mordent pas.
A bientôt.
oui, voilà le script entier, il me sert à renommer mes mp3 (j'ai le même pour les ogg qui fonctionne) :
Ce script fonctionne sous Linux car id3info ne renvoi pas de tab. Là je suis sur Mac OsX et id3tool lui me renvoit des infos du style : Artist:(tab)nom
donc je voulais faire une sélection type ligne=${ligne##(tab)} mais il ne m'enlève rien, comme si il ne trouvait pas de tab... pourtant j'ai vérifié l'hexa, c'est bien des tab...
On 2004-06-04 15:51:42 +0200, David LE BOURGEOIS
<this.address@is.invalid> said:
Bonjour,
Bonjour.
J'ai un fichier que je traite sous bash
j'extrais des lignes avec grep du fichier, mais elles debutent par des
tabulations
je veux enlever les caractères tabulations qui commencent la variable $toto
Que vient faire la variable $toto ?
Est-il possible d'avoir un bout de code, pour situer le contexte ?
je voudrais un truc du genre :
toto=${toto##t} mais il reconnais pas t :-(
Pour le caractère tabulation, pourquoi ne pas utiliser la touche
tabulation du clavier ?
Ce script fonctionne sous Linux car id3info ne renvoi pas de tab.
Là je suis sur Mac OsX et id3tool lui me renvoit des infos du style :
Artist:(tab)nom
donc je voulais faire une sélection type ligne=${ligne##(tab)}
mais il ne m'enlève rien, comme si il ne trouvait pas de tab...
pourtant j'ai vérifié l'hexa, c'est bien des tab...
On 2004-06-04 15:51:42 +0200, David LE BOURGEOIS said:
Bonjour,
Bonjour.
J'ai un fichier que je traite sous bash
j'extrais des lignes avec grep du fichier, mais elles debutent par des tabulations je veux enlever les caractères tabulations qui commencent la variable $toto
Que vient faire la variable $toto ? Est-il possible d'avoir un bout de code, pour situer le contexte ?
je voudrais un truc du genre : toto=${toto##t} mais il reconnais pas t :-(
Pour le caractère tabulation, pourquoi ne pas utiliser la touche tabulation du clavier ?
~ $ foo=" bar" ~ $ echo "${foo## }" bar
j'ai essayé avec x009, pareil, il ne veut pas...
Si j'ai bien compris, il faut rechercher le motif dans un fichier, et lui supprimer ses tabulations éventuelles de début. Alors je dirai :
sed 's/^ *//;/MOTIF/p;d' FICHIER
Ou plus efficace :
perl -ne 'if(/MOTIF/){s/^t*//;print}' FICHIER
soyez indulgents, c'est mon premier post sur la liste ;-)
Les pingouins ne mordent pas.
A bientôt.
oui, voilà le script entier, il me sert à renommer mes mp3 (j'ai le même pour les ogg qui fonctionne) :
Ce script fonctionne sous Linux car id3info ne renvoi pas de tab. Là je suis sur Mac OsX et id3tool lui me renvoit des infos du style : Artist:(tab)nom
donc je voulais faire une sélection type ligne=${ligne##(tab)} mais il ne m'enlève rien, comme si il ne trouvait pas de tab... pourtant j'ai vérifié l'hexa, c'est bien des tab...
Rodolphe Mosca
On 2004-06-04 19:19:40 +0200, Rodolphe Mosca <rodolphe.mosca@(ns)club-internet.fr> said:
On 2004-06-04 15:51:42 +0200, David LE BOURGEOIS said:
Bonjour,
Bonjour.
J'ai un fichier que je traite sous bash
j'extrais des lignes avec grep du fichier, mais elles debutent par des tabulations je veux enlever les caractères tabulations qui commencent la variable $toto
Que vient faire la variable $toto ? Est-il possible d'avoir un bout de code, pour situer le contexte ?
je voudrais un truc du genre : toto=${toto##t} mais il reconnais pas t :-(
Pour le caractère tabulation, pourquoi ne pas utiliser la touche tabulation du clavier ?
~ $ foo=" bar" ~ $ echo "${foo## }" bar
j'ai essayé avec x009, pareil, il ne veut pas...
Si j'ai bien compris, il faut rechercher le motif dans un fichier, et lui supprimer ses tabulations éventuelles de début. Alors je dirai :
sed 's/^ *//;/MOTIF/p;d' FICHIER
Ou plus efficace :
perl -ne 'if(/MOTIF/){s/^t*//;print}' FICHIER
soyez indulgents, c'est mon premier post sur la liste ;-)
Les pingouins ne mordent pas.
A bientôt.
oui, voilà le script entier, il me sert à renommer mes mp3 (j'ai le même pour les ogg qui fonctionne) :
Ce script fonctionne sous Linux car id3info ne renvoi pas de tab. Là je suis sur Mac OsX et id3tool lui me renvoit des infos du style : Artist:(tab)nom
donc je voulais faire une sélection type ligne=${ligne##(tab)} mais il ne m'enlève rien, comme si il ne trouvait pas de tab... pourtant j'ai vérifié l'hexa, c'est bien des tab...
Ha ben j'ai trouvé ! il fallait juste mettre * devant... j'ai donc : album=${album##*(tab)} et ca fonctionne... ouf
On 2004-06-04 19:19:40 +0200, Rodolphe Mosca
<rodolphe.mosca@(ns)club-internet.fr> said:
On 2004-06-04 15:51:42 +0200, David LE BOURGEOIS
<this.address@is.invalid> said:
Bonjour,
Bonjour.
J'ai un fichier que je traite sous bash
j'extrais des lignes avec grep du fichier, mais elles debutent par des
tabulations
je veux enlever les caractères tabulations qui commencent la variable $toto
Que vient faire la variable $toto ?
Est-il possible d'avoir un bout de code, pour situer le contexte ?
je voudrais un truc du genre :
toto=${toto##t} mais il reconnais pas t :-(
Pour le caractère tabulation, pourquoi ne pas utiliser la touche
tabulation du clavier ?
Ce script fonctionne sous Linux car id3info ne renvoi pas de tab.
Là je suis sur Mac OsX et id3tool lui me renvoit des infos du style :
Artist:(tab)nom
donc je voulais faire une sélection type ligne=${ligne##(tab)}
mais il ne m'enlève rien, comme si il ne trouvait pas de tab...
pourtant j'ai vérifié l'hexa, c'est bien des tab...
Ha ben j'ai trouvé !
il fallait juste mettre * devant...
j'ai donc : album=${album##*(tab)}
et ca fonctionne... ouf
On 2004-06-04 19:19:40 +0200, Rodolphe Mosca <rodolphe.mosca@(ns)club-internet.fr> said:
On 2004-06-04 15:51:42 +0200, David LE BOURGEOIS said:
Bonjour,
Bonjour.
J'ai un fichier que je traite sous bash
j'extrais des lignes avec grep du fichier, mais elles debutent par des tabulations je veux enlever les caractères tabulations qui commencent la variable $toto
Que vient faire la variable $toto ? Est-il possible d'avoir un bout de code, pour situer le contexte ?
je voudrais un truc du genre : toto=${toto##t} mais il reconnais pas t :-(
Pour le caractère tabulation, pourquoi ne pas utiliser la touche tabulation du clavier ?
~ $ foo=" bar" ~ $ echo "${foo## }" bar
j'ai essayé avec x009, pareil, il ne veut pas...
Si j'ai bien compris, il faut rechercher le motif dans un fichier, et lui supprimer ses tabulations éventuelles de début. Alors je dirai :
sed 's/^ *//;/MOTIF/p;d' FICHIER
Ou plus efficace :
perl -ne 'if(/MOTIF/){s/^t*//;print}' FICHIER
soyez indulgents, c'est mon premier post sur la liste ;-)
Les pingouins ne mordent pas.
A bientôt.
oui, voilà le script entier, il me sert à renommer mes mp3 (j'ai le même pour les ogg qui fonctionne) :
Ce script fonctionne sous Linux car id3info ne renvoi pas de tab. Là je suis sur Mac OsX et id3tool lui me renvoit des infos du style : Artist:(tab)nom
donc je voulais faire une sélection type ligne=${ligne##(tab)} mais il ne m'enlève rien, comme si il ne trouvait pas de tab... pourtant j'ai vérifié l'hexa, c'est bien des tab...
Ha ben j'ai trouvé ! il fallait juste mettre * devant... j'ai donc : album=${album##*(tab)} et ca fonctionne... ouf
David LE BOURGEOIS
David LE BOURGEOIS écrit:
Ou plus efficace :
perl -ne 'if(/MOTIF/){s/^t*//;print}' FICHIER
perl -pe 's/^t*// if /MOTIF/'
?
Je teste :
---8<------------ ~ $ perl -pe 's/^t*// if /MOTIF/' << FIN heredoc> MOTIF heredoc> MOTIF heredoc> pas motif heredoc> pas motif heredoc> FIN MOTIF MOTIF pas motif pas motif ---8<------------
Alors que :
---8<------------ ~ $ perl -ne 'if(/MOTIF/){s/^t*//;print}' << FIN heredoc> MOTIF heredoc> MOTIF heredoc> pas motif heredoc> pas motif heredoc> FIN MOTIF MOTIF ---8<------------
En fait, le but est bien de rechercher un MOTIF et de lui supprimer ses tabulations de début, mais sans afficher tout le reste.
Ou alors ai-je mal compris ?
-- David LE BOURGEOIS
David LE BOURGEOIS <this.address@is.invalid> écrit:
Ou plus efficace :
perl -ne 'if(/MOTIF/){s/^t*//;print}' FICHIER
perl -pe 's/^t*// if /MOTIF/'
?
Je teste :
---8<------------
david@dragon ~ $ perl -pe 's/^t*// if /MOTIF/' << FIN
heredoc> MOTIF
heredoc> MOTIF
heredoc> pas motif
heredoc> pas motif
heredoc> FIN
MOTIF
MOTIF
pas motif
pas motif
---8<------------
Alors que :
---8<------------
david@dragon ~ $ perl -ne 'if(/MOTIF/){s/^t*//;print}' << FIN
heredoc> MOTIF
heredoc> MOTIF
heredoc> pas motif
heredoc> pas motif
heredoc> FIN
MOTIF
MOTIF
---8<------------
En fait, le but est bien de rechercher un MOTIF et de lui supprimer ses
tabulations de début, mais sans afficher tout le reste.
---8<------------ ~ $ perl -pe 's/^t*// if /MOTIF/' << FIN heredoc> MOTIF heredoc> MOTIF heredoc> pas motif heredoc> pas motif heredoc> FIN MOTIF MOTIF pas motif pas motif ---8<------------
Alors que :
---8<------------ ~ $ perl -ne 'if(/MOTIF/){s/^t*//;print}' << FIN heredoc> MOTIF heredoc> MOTIF heredoc> pas motif heredoc> pas motif heredoc> FIN MOTIF MOTIF ---8<------------
En fait, le but est bien de rechercher un MOTIF et de lui supprimer ses tabulations de début, mais sans afficher tout le reste.
Ou alors ai-je mal compris ?
-- David LE BOURGEOIS
David LE BOURGEOIS
oui, voilà le script entier, il me sert à renommer mes mp3 (j'ai le même pour les ogg qui fonctionne) :
Les deux pourraient se regrouper en un seul.
#!/bin/bash des="/Volumes/datas/Download/02music" for mp3 in *.mp3 ; do echo "mp3 traité est : $mp3" num=${mp3:0:2} id3tool $mp3 > /tmp/mp3.inf
id3tool "$mp3" > /tmp/mp3.inf
Les noms de fichiers (surtout pour les mp3) ont souvent des espaces, des tirés, ... qui sont interprétés par le shell si on ne les protège pas.
Entourrer les variables de " est souvent une bonne habitude.
Ce script fonctionne sous Linux car id3info ne renvoi pas de tab. Là je suis sur Mac OsX et id3tool lui me renvoit des infos du style : Artist:(tab)nom
donc je voulais faire une sélection type ligne=${ligne##(tab)} mais il ne m'enlève rien, comme si il ne trouvait pas de tab... pourtant j'ai vérifié l'hexa, c'est bien des tab...
Une inspiration en Perl (pas testée) :
#!/usr/bin/perl -w
use strict;
my $des = "/Volumes/datas/Download/02music"; while (<*.mp3>) { my ($num) = /^(d+)/; my ($title, $artist, $album); foreach (`id3tool "$_"`) { $title = $1 if /Song Title:s*(.*)/; $artist = $1 if /Artist:s*(.*)/; $album = $1 if /Album:s*(.*)/; } next unless defined $num && defined $title && defined $artist && defined $album; unless(-d "$des/$artist/$album") { unless(-d "$des/$artist") { mkdir "$des/$artist" or next; } mkdir "$des/$artist/$album" or next; } rename $_, "$des/$artist/$album/$num - $title.mp3"; print "mp3 traité est : $_n"; }
Si ça peut aider...
-- David LE BOURGEOIS
oui, voilà le script entier, il me sert à renommer mes mp3 (j'ai le même
pour les ogg qui fonctionne) :
Les deux pourraient se regrouper en un seul.
#!/bin/bash
des="/Volumes/datas/Download/02music"
for mp3 in *.mp3 ; do
echo "mp3 traité est : $mp3"
num=${mp3:0:2}
id3tool $mp3 > /tmp/mp3.inf
id3tool "$mp3" > /tmp/mp3.inf
Les noms de fichiers (surtout pour les mp3) ont souvent des espaces, des
tirés, ... qui sont interprétés par le shell si on ne les protège pas.
Entourrer les variables de " est souvent une bonne habitude.
Ce script fonctionne sous Linux car id3info ne renvoi pas de tab.
Là je suis sur Mac OsX et id3tool lui me renvoit des infos du style :
Artist:(tab)nom
donc je voulais faire une sélection type ligne=${ligne##(tab)}
mais il ne m'enlève rien, comme si il ne trouvait pas de tab... pourtant
j'ai vérifié l'hexa, c'est bien des tab...
Une inspiration en Perl (pas testée) :
#!/usr/bin/perl -w
use strict;
my $des = "/Volumes/datas/Download/02music";
while (<*.mp3>) {
my ($num) = /^(d+)/;
my ($title, $artist, $album);
foreach (`id3tool "$_"`) {
$title = $1 if /Song Title:s*(.*)/;
$artist = $1 if /Artist:s*(.*)/;
$album = $1 if /Album:s*(.*)/;
}
next unless defined $num
&& defined $title
&& defined $artist
&& defined $album;
unless(-d "$des/$artist/$album") {
unless(-d "$des/$artist") {
mkdir "$des/$artist" or next;
}
mkdir "$des/$artist/$album" or next;
}
rename $_, "$des/$artist/$album/$num - $title.mp3";
print "mp3 traité est : $_n";
}
Ce script fonctionne sous Linux car id3info ne renvoi pas de tab. Là je suis sur Mac OsX et id3tool lui me renvoit des infos du style : Artist:(tab)nom
donc je voulais faire une sélection type ligne=${ligne##(tab)} mais il ne m'enlève rien, comme si il ne trouvait pas de tab... pourtant j'ai vérifié l'hexa, c'est bien des tab...
Une inspiration en Perl (pas testée) :
#!/usr/bin/perl -w
use strict;
my $des = "/Volumes/datas/Download/02music"; while (<*.mp3>) { my ($num) = /^(d+)/; my ($title, $artist, $album); foreach (`id3tool "$_"`) { $title = $1 if /Song Title:s*(.*)/; $artist = $1 if /Artist:s*(.*)/; $album = $1 if /Album:s*(.*)/; } next unless defined $num && defined $title && defined $artist && defined $album; unless(-d "$des/$artist/$album") { unless(-d "$des/$artist") { mkdir "$des/$artist" or next; } mkdir "$des/$artist/$album" or next; } rename $_, "$des/$artist/$album/$num - $title.mp3"; print "mp3 traité est : $_n"; }