#1 Le 27/09/2019, à 10:49
- ShinouQ
[Résolu]La commande "cut" ne me renvoie pas la bonne colonne!
Bonjour à tous, j'ai un problème avec la commande cut, en effet admettons que j'ai un dossier courant tel que:
ls -l
donne
-rw-rw-r-- 1 haffner haffner 0 sept. 26 16:24 code2.c
-rw-rw-r-- 1 haffner haffner 0 sept. 26 16:24 code.c
-rwx------ 1 haffner haffner 95 sept. 27 11:36 find_sh.sh
-rwx------ 1 haffner haffner 54 sept. 26 16:25 find_sh.sh~
-rw-rw-r-- 1 haffner haffner 0 sept. 26 16:24 script.sh
-rw-rw-r-- 1 haffner haffner 0 sept. 26 16:23 test.sh
-rw-rw-r-- 1 haffner haffner 0 sept. 26 16:24 texte.txt
Et que je fasse
ls -l | grep ".sh$" | cut -d " " -f 9
pour obtenir le nom des fichiers .sh de mon dossier. Et bien je n'obtiens la bonne réponse que pour un fichier sur 3! Voilà ce que la commande renvoie chez moi:
find_sh.sh
16:24
16:23
Si une âme charitable pouvait bien m'éclairer sur ce problème je lui serait reconnaissant :-)
Dernière modification par ShinouQ (Le 27/09/2019, à 11:29)
Hors ligne
#2 Le 27/09/2019, à 11:00
- credenhill
Re : [Résolu]La commande "cut" ne me renvoie pas la bonne colonne!
hello
il y a 2 espaces entre haffner et 0, un seul entre haffner et 95
Hors ligne
#3 Le 27/09/2019, à 11:01
- pingouinux
Re : [Résolu]La commande "cut" ne me renvoie pas la bonne colonne!
Bonjour,
C'est parce que certaines lignes contiennent plusieurs espaces consécutifs, qu'il faut regrouper.
Tu peux faire
..... | sed 's/ \+/ /g' | cut -d " " -f 9
Le mieux serait de faire
ls -1 *.sh
Hors ligne
#4 Le 27/09/2019, à 11:06
- nany
Re : [Résolu]La commande "cut" ne me renvoie pas la bonne colonne!
Bonjour,
On peut aussi utiliser tr :
ls -l | grep ".sh$" | tr -s ' ' | cut -d " " -f 9
Sinon avec awk au lieu de cut :
ls -l | grep ".sh$" | awk '{print $9}'
Enfin, la question que je me pose, c’est pourquoi n’utilises-tu pas tout simplement la commande find ?
En ligne
#5 Le 27/09/2019, à 11:17
- Postmortem
Re : [Résolu]La commande "cut" ne me renvoie pas la bonne colonne!
Salut,
Pour afficher les noms de fichiers, y'a pas besoin de commande externe.
echo *.sh # Les uns à la suite des autres
printf '%s\n' *.sh # Sur une colonne
Mot' a dit : « Un Hellfest sans Slayer, c'est comme une galette-saucisse sans saucisse ! »
Hors ligne
#6 Le 27/09/2019, à 11:27
- ShinouQ
Re : [Résolu]La commande "cut" ne me renvoie pas la bonne colonne!
Ah d'accord j'avais pas vu qu'il y avait 2 espaces...
Du coup merci, je vais m'arranger pour les réduire à un espace à l'aide de vos réponses.
Et sinon oui je savais qu'il y a d'autres solutions plus "simples" pour mon problème mais j'avais juste envie de m'entraîner avec grep et cut
Hors ligne
#7 Le 27/09/2019, à 19:22
- kamaris
Re : [Résolu]La commande "cut" ne me renvoie pas la bonne colonne!
Accessoirement, ton grep ne filtre pas comme tu le penses : il faut protéger le point dans « .sh$ », car là il signifie « n'importe quel caractère ». Ce caractère peut donc en particulier être un point, mais pas seulement (exemple : essaie de mettre un fichier nommé f.ssh dans ton répertoire).
La bonne commande est donc :
grep '\.sh$'
Hors ligne
#8 Le 28/09/2019, à 13:51
- ShinouQ
Re : [Résolu]La commande "cut" ne me renvoie pas la bonne colonne!
Oui j'y avais pas pensé non plus. Il faut que je me mette à jour sur les regexp, merci :-)
Hors ligne