Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Unix
Unix Forum d'entraide sur les systèmes Unix et dérivés (*BSD, AIX, etc.). Avant de poster ->F.A.Q BSD F.A.Q. Aix
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 06/04/2011, 10h06   #1
Invité de passage
 
Femme Alexia
Étudiant
Inscription : avril 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Femme Alexia
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 3
Points : 4
Points : 4
Par défaut [Commande tr, awk et sed] : caractère en fin de ligne

Bonjour,
Je travaille sur un script shell qui est censé mettre un caractère à la fin de chaque ligne de tous les fichiers .clh de mon répertoire courant.
Donc pour ça tout va bien.

Code :
cat $base | sed 's/$/\\/g' >> $fichier

Sauf que ça marche, mais qu'au début du fichier... et de manière aléatoire, y'a des fichiers où ça plante direct...

Code :
1
2
3
4
5
6
7
8
9
ligne1\
ligne2\
\
ligne4\
ligne5
\
ligne 6
\
J'ai voulu tester sur un texte tout prêt pour le poster ici, mais sur le texte, ça a marché.

Alors, je me suis demandé si ce n'était pas un problème de saut de ligne.
Du coup, j'ai essayé ces deux commandes :

Code :
cat "$fichier.bak" | tr -s '\n' ' ' > "$fichier.txt
et
Code :
awk 1 RS= ORS="\n" "$fichier.bak
Mais ça ne marche pas... Ça ne fait aucun effet sur mes fichiers.

L'extension de mes fichiers est le clh, alors je me suis demandé si y'avait un problème sur ça (pourquoi pas... sachant que les commandes shell sont écrites partout sur le web... l'erreur est ailleurs). J'ai copié les fichiers dans un fichier du même nom, sans l'extension, $base.

Mes fichiers sont du code source.

Et enfin, une dernière question, pourquoi
Code :
tr "(" " " < $1 > toto0123456789
ça marche et que
Code :
cat $1 | tr "(" " "  > toto0123456789
ça me met un fichier vide ?

Merci d'avance !
MiladyThethys est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/04/2011, 12h14   #2
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Quel système ? Ou quelle distrib?
Quel shell ?

Affiche ton fichier (ou un bout du moins si trop grand) avec les caractères non-imprimables :

__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/04/2011, 14h30   #3
Invité de passage
 
Femme Alexia
Étudiant
Inscription : avril 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Femme Alexia
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 3
Points : 4
Points : 4
Je suis sur une Ubuntu 10.10, avec sh. (d'ailleurs, je viens de voir que le post n'est sûrement pas au bon endroit :/ )
J'essaye le cat de suite.

A chaque fin de ligne, il y a ^M$ .
MiladyThethys est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 06/04/2011, 14h42   #4
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
Code :
1
2
sed "1, $ s/^M//g" fichier
/!\ le ^M s'obtient en tappant exactement et dans l'ordre
ctrl+v puis enter
/!\


et rien d'autre.

ça va épurer ton fichier pourri par µ$oft en un vrai fichier exploitable après quoi tu pourras y travailler.
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 14h55   #5
Invité de passage
 
Femme Alexia
Étudiant
Inscription : avril 2011
Messages : 3
Détails du profil
Informations personnelles :
Nom : Femme Alexia
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : avril 2011
Messages : 3
Points : 4
Points : 4
J'ai pas eu le choix, j'ai du reprendre un code écrit sous wind***...
Et le continuer aussi...

Merci beaucoup, j'essaye le coup de l'épuration !

J'ai fais la commande d'épuration, mais le résultat est le même. Après peut être que du coup mes tr et awk marcheront mieux.
Je vous tiens au courant.
MiladyThethys est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 06/04/2011, 16h24   #6
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
tu as peut etre oublié d'enregistrer le fichier modifié
Code :
sed "1, $ s/^M//g" fichier > resultat
par exemple selon la version de sed
ou sinon
Code :
sed -i "1, $ s/^M//g" fichier
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2011, 16h39   #7
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 965
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 965
Points : 1 365
Points : 1 365
Citation:
Envoyé par MiladyThethys;5893364
Et enfin, une dernière question, pourquoi
[code
tr "(" " " < $1 > toto0123456789[/code] ça marche et que
Code :
cat $1 | tr "(" " "  > toto0123456789
ça me met un fichier vide ?
$1 est-il égal à toto0123456789 ?
__________________
ɹǝsn *sıɹɐlos*
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 01
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h03.


 
 
 
 
Partenaires

Hébergement Web