Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 11/03/2016, à 20:43

argolance

grep et chemin/nom de fichier avec espaces [RÉSOLU]

Bonjour,

#MONFICHIER="chemin vers mon fichier/mon fichier"
#grep motif $MONFICHIER
grep: chemin: No such file or directory
grep: vers: No such file or directory
grep: mon: No such file or directory
[...]

J'ai essayé plein de combinaisons avec ', ", {, }... et j'en passe.
Rien à faire.
Une idée?
Merci de votre attention.

Dernière modification par argolance (Le 12/03/2016, à 16:16)

Hors ligne

#2 Le 11/03/2016, à 21:07

HP

Re : grep et chemin/nom de fichier avec espaces [RÉSOLU]

#MONFICHIER="chemin vers mon fichier/mon fichier"
#grep motif "$MONFICHIER"

cat /dev/urandom >/dev/null 2>&1 #github

Hors ligne

#3 Le 12/03/2016, à 10:42

argolance

Re : grep et chemin/nom de fichier avec espaces [RÉSOLU]

Bonjour,
Merci HP pour ta réponse.
Ce n'est malheureusement pas aussi facile,
J'ai oublié de spécifier que ces lignes font partie d'un script

#!/bin/bash

En console ou en

#!/bin/sh

tout se passe bien.
Je suis contraint au bash parce que j'ai par ailleurs une autre ligne avec les commandes 'comm' et 'sort' combinées, que je ne suis parvenu à faire fonctionner qu'en bash et pas en sh. Cela devrait faire l'objet d'un autre topic connexe, mais voici la ligne pour info:

comm -3 <(sort fichier1)  <(sort fichier2) > fichier3

Cordialement.

Hors ligne

#4 Le 12/03/2016, à 12:48

pingouinux

Re : grep et chemin/nom de fichier avec espaces [RÉSOLU]

Bonjour,
Ceci ne marche pas ?

comm -3 <(sort "fichier1")  <(sort "fichier2") > "fichier3"

ou bien

comm -3 <(sort "$variable_contenant_le_nom_de_fichier1")  <(sort "$variable_contenant_le_nom_de_fichier2") > "$variable_contenant_le_nom_de_fichier3"

Hors ligne

#5 Le 12/03/2016, à 13:07

argolance

Re : grep et chemin/nom de fichier avec espaces [RÉSOLU]

#!/bin/sh
TEMP_DIR="/tmp/jwmtec_tmp"
comm -3 <(sort "$TEMP_DIR/WindowStyle_tmp")  <(sort "$TEMP_DIR/WindowStyle_Active")

Le script lancé en console donne:

line 3: syntax error near unexpected token `('
line 3: `comm -3 <(sort "$TEMP_DIR/WindowStyle_tmp")  <(sort "$TEMP_DIR/WindowStyle_Active")'
Script completed hit RETURN to close window.

Quant à la deuxième solution (qui marche sans doute) elle est comme l'autre, beaucoup moins "jolie"... wink

Hors ligne

#6 Le 12/03/2016, à 13:11

pingouinux

Re : grep et chemin/nom de fichier avec espaces [RÉSOLU]

Il faut utiliser bash, et non sh.

Hors ligne

#7 Le 12/03/2016, à 14:32

argolance

Re : grep et chemin/nom de fichier avec espaces [RÉSOLU]

Telle quelle, cette commande ne fonctionne efectivement qu'en bash et c'est l'objet de l'autre fil que je me suis permis de lancer.
Ficher de test nommé 'fichier de test' en /root et contenant le mot 'motif'

#  grep motif /root/fichier de test
grep: /root/fichier: No such file or directory
grep: de: No such file or directory
# grep motif "/root/fichier de test"
motif
# FILE=/root/fichier de test
bash: de: Commande introuvable
# FILE="/root/fichier de test"
# grep motif $FILE
grep: /root/fichier: No such file or directory
grep: de: No such file or directory
# grep motif "$FILE"
motif

Dans mon script, la variable arrive sans "", comme dans FILE=/root/fichier de test.

# FILE=/root/fichier\ de\ test
# grep motif "$FILE"
motif
# 

J'ai donc finalement passé mon script en sh: c'est moins "joli" mais au moins ça fonctionne (et ça c'est vrai pour beaucoup de choses...).roll

Cordialement.

Dernière modification par argolance (Le 12/03/2016, à 14:33)

Hors ligne

#8 Le 12/03/2016, à 14:52

pingouinux

Re : grep et chemin/nom de fichier avec espaces [RÉSOLU]

Ces deux séries de commandes sont correctes, en bash ou sh.

FILE="/root/fichier de test"
grep motif "$FILE"
FILE=/root/fichier\ de\ test
grep motif "$FILE"

Hors ligne

#9 Le 12/03/2016, à 15:46

argolance

Re : grep et chemin/nom de fichier avec espaces [RÉSOLU]

Merci.

# FILE1=/root/fichier de test
bash: de: Commande introuvable
# FILE2="/root/fichier de test"
# FILE3=/root/fichierdetest #copie de /root/fichier de test
# echo $FILE1

# echo $FILE2
/root/fichier de test
# echo $FILE3
/root/fichierdetest
# grep motif "$FILE1"
grep: : No such file or directory
# grep motif "$FILE2"
motif
# grep motif "$FILE3"
motif

Tant que les chemins/noms de fichiers n'ont pas d'espace, la commande fonctionne avec ou sans guillemets.

Hors ligne

#10 Le 12/03/2016, à 16:02

erresse

Re : grep et chemin/nom de fichier avec espaces [RÉSOLU]

argolance a écrit :

Tant que les chemins/noms de fichiers n'ont pas d'espace, la commande fonctionne avec ou sans guillemets.

Ben oui, c'est justement parce-qu'il y a des espaces qu'il faut mettre des guillemets (ou échapper les caractères)...
Et ça vaut aussi bien pour sh que pour bash.


Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois résolu, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.

En ligne

#11 Le 12/03/2016, à 16:11

Watael

Re : grep et chemin/nom de fichier avec espaces [RÉSOLU]

salut,

si parfois tu mets des guillemets, et des fois non, à un moment ou à un autre tu vas te trouver confronté à un problème similaire.
prends l'habitude de mettre, systématiquement, des guillemets autour des variables.


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#12 Le 12/03/2016, à 16:17

argolance

Re : grep et chemin/nom de fichier avec espaces [RÉSOLU]

"NOTÉ"!
Merci à tous.

Hors ligne