Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
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 22/01/2010, 17h18   #1
Candidat au titre de Membre du Club
 
maxime Meier
Inscription : novembre 2009
Messages : 13
Détails du profil
Informations personnelles :
Nom : maxime Meier

Informations forums :
Inscription : novembre 2009
Messages : 13
Points : 11
Points : 11
Par défaut Script shell : afficher le contenu des variables entre simple quote

Bonjour,

je cherche un moyen d'afficher mes variables sans interpréter le contenu de celle ci.

exemple :

avec une variable :
je voudrais par exemple faire un :
et que il m'affiche :
et non :
exemple2 :
pour :
Code :
1
2
3
 
var="-v"
cat file.txt | grep $var
je voudrais qu'il m'affiche les lignes ou il y a "-v" et non :
Code :
1
2
3
 
Usage: grep [OPTION]... PATTERN [FILE]...
Try `grep --help' for more information.

Il me faudrait donc une technique pour mettre par exemple un backslash devant chaque caractère pour les protéger... ou autre?

Auriez vous une solution?

D'avance merci
mualki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2010, 18h28   #2
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
Code :
1
2
3
4
5
6
7
8
# de l'utilité des guillemets :
var="ma_v\ar"
echo "$var"
ma_v\ar
 
# attention aux uuoc (Useless Use Of Cat)
# -- bien souvent, marque la fin des options d'un programme, ici, grep :
grep -- -v file.txt
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2010, 18h43   #3
Candidat au titre de Membre du Club
 
maxime Meier
Inscription : novembre 2009
Messages : 13
Détails du profil
Informations personnelles :
Nom : maxime Meier

Informations forums :
Inscription : novembre 2009
Messages : 13
Points : 11
Points : 11
Tout d'abord merci de ta réponse.

Cela fonctionne effectivement, mais je ne peux l'appliquer pour mon cas ou en faite je parcoure un fichier ligne par ligne :

Code :
1
2
3
4
5
 
while read line
do
 echo "$line"
done < file.txt
en parcourant le fichier comme cela les \ ne sont pas prient en compte.

et pour le grep le problème reste identique.
mualki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2010, 18h47   #4
Nouveau Membre du Club
 
David
Inscription : avril 2009
Messages : 26
Détails du profil
Informations personnelles :
Nom : David
Âge : 40

Informations forums :
Inscription : avril 2009
Messages : 26
Points : 27
Points : 27
Bonjour mualki,

le \ permet de protéger un caractère, mais dans ton cas il faut aussi protéger le \ d'où :
Code :
1
2
3
var="ma_v\\\ar"
echo $var
ma_v\ar
Code :
1
2
var="\\-v"
grep "$var" file.txt
syjis est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2010, 18h57   #5
Candidat au titre de Membre du Club
 
maxime Meier
Inscription : novembre 2009
Messages : 13
Détails du profil
Informations personnelles :
Nom : maxime Meier

Informations forums :
Inscription : novembre 2009
Messages : 13
Points : 11
Points : 11
bonjour syjis,

Le problème est que les variables sont des informations entrées par l'utilisateur en argument ou dans un fichier.

Je souhaite donc que ces informations soient interprétés telles qu'elles ... Sans que l'utilisateur n'ait à mettre une séries de backslash.
mualki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2010, 19h11   #6
Candidat au titre de Membre du Club
 
maxime Meier
Inscription : novembre 2009
Messages : 13
Détails du profil
Informations personnelles :
Nom : maxime Meier

Informations forums :
Inscription : novembre 2009
Messages : 13
Points : 11
Points : 11
J'ai résolu le problème du read en ajoutant l'option -r qui ne prend pas en compte les backslash.

Seulement mon problème s'est reporté sur un sed :

Code :
1
2
3
4
5
 
 
val="val3\39"
 
sed '/'"$val"'\:/d' file.txt
réponse !

Code :
1
2
3
 
 
$> sed: 1: "/val3\39\:/d": RE error: invalid backreference number
mualki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2010, 19h27   #7
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
Code :
1
2
3
4
5
6
7
8
cat file.txt
ma_v\ar
val3\39

val="val3\39"
val="${val//\\/\\\\}"
sed "/$val/d" file.txt
ma_v\ar
val="${val//\\/\\\\}" : voir man bash - Remplacement des paramètres
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2010, 19h38   #8
Membre confirmé
 
Avatar de exodev
 
Inscription : septembre 2009
Messages : 201
Détails du profil
Informations personnelles :
Âge : 25

Informations forums :
Inscription : septembre 2009
Messages : 201
Points : 292
Points : 292
Rien n'empêche de faire un traitement à posteriori des informations rentrées par l'utilisateur, par exemple transformer un \ en \\ pour que l'interprétation se déroule correctement

Sinon si tes fichiers ne sont pas grands, à la place de la boucle while avec read :
Code :
1
2
3
4
for line in $(cat file.txt)
do
 echo $line
done
bon le temps de répondre le problème du read est résolu
exodev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2010, 19h45   #9
Candidat au titre de Membre du Club
 
maxime Meier
Inscription : novembre 2009
Messages : 13
Détails du profil
Informations personnelles :
Nom : maxime Meier

Informations forums :
Inscription : novembre 2009
Messages : 13
Points : 11
Points : 11
Citation:
Envoyé par N_BaH Voir le message
Code :
1
2
3
4
5
6
7
8
cat file.txt
ma_v\ar
val3\39

val="val3\39"
val="${val//\\/\\\\}"
sed "/$val/d" file.txt
ma_v\ar
val="${val//\\/\\\\}" : voir man bash - Remplacement des paramètres
j'ai toujours un message d'erreur quand j'essaye d'utiliser cette technique :
Code :
1
2
3
 
 
$> Syntax error: Bad substitution
meme si je lui met cela :

Code :
1
2
3
 
 
val="${val//a/b}"
mualki est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/01/2010, 21h49   #10
Expert Confirmé
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 1 897
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 1 897
Points : 3 677
Points : 3 677
bizarre. Quel shell utilises-tu ?
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/01/2010, 00h14   #11
Candidat au titre de Membre du Club
 
maxime Meier
Inscription : novembre 2009
Messages : 13
Détails du profil
Informations personnelles :
Nom : maxime Meier

Informations forums :
Inscription : novembre 2009
Messages : 13
Points : 11
Points : 11
j'ai essayé sur tcsh et bash... même résultat, mais c'est sur les serveurs de mon école peut être qu'ils sont pas à jour, car quand je fais un man sh il me met bien les modifications de parametre mais il n'y a pas la partie sur le remplacement de caractère comme dans celui que N_BaH as donné.

Pour ceux que ça pourrait intéresser J'ai trouvé une alternative en utilisant :

Code :
1
2
 
sed "s/chaine_a_remplacer/chaine_de_remplacement/g"

Merci à tous de votre aide
mualki est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 07h53.


 
 
 
 
Partenaires

Hébergement Web