Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

comportement de grep bizarre ?

19 réponses
Avatar
gregg
Bonsoir,


lorsque je fais:

ls -l | grep "^d"

Ca va, je reçois tous les répertoires.


Par contre, avec ça:

ls | grep "^i"

je ne reçois pas tous le fichiers commençant par "i"...

Pourquoi ?


gregg

10 réponses

1 2
Avatar
Stephane Chazelas
2004-12-13, 19:17(+01), gregg:
[...]
ls -l | grep "^d"

Ca va, je reçois tous les répertoires.


Par contre, avec ça:

ls | grep "^i"

je ne reçois pas tous le fichiers commençant par "i"...
[...]


Et tu recois quoi?

Note que cette logique (ls | grep) ne fonctionne plus si les
noms des fichiers contiennent des sauts de ligne.

Note aussi:

ls -d i* 2> /dev/null

ou (zsh):

print -rl i*

--
Stephane

Avatar
Jacques L'helgoualc'h
Bonsoir,


bonsoir.

[...]
Par contre, avec ça:

ls | grep "^i"

je ne reçois pas tous le fichiers commençant par "i"...

Pourquoi ?


man ls =>

Le résultat est envoyé sur la sortie standard, un élément par
ligne, sauf si un affichage multi-colonne est demandé avec
l'option -C. Toutefois, lorsque la sortie standard est un
terminal, l'affichage peut se faire sur une ou plusieurs colonnes
suivant l'implémentation. Les options -1 et -C forcent un
affichage sur une seule colonne ou plusieurs, respectivement.

Les fichiers i* peuvent alors ne pas apparaître en première colonne. Que
donne la commande alias ?
--
Jacques L'helgoualc'h

Avatar
gregg
Stephane Chazelas wrote:

Et tu recois quoi?



[306:0]
~/hiddens$ ls -A
.a_hidden_dir .b_hidden_file .hidden_file adir afile listing.sh
[307:0]
~/hiddens$ ls -Al | grep "^d"
drwxr-xr-x 2 gregg hacker 4096 2004-12-13 18:45 .a_hidden_dir
drwxr-xr-x 2 gregg hacker 4096 2004-12-13 18:46 adir
[308:0]
~/hiddens$ ls | grep "^a"
[309:1]
~/hiddens$


Pas de résultat, et $? vaut 1 (échec de la commande, en ce sens qu'il
n'y a pas de résultat, je crois: pas forcément une erreur).

J'utilise bash, et je viens de penser à l'instant: peut-être une sombre
histoire d'alias ?
(fouille... fouille...)

alias ls='ls --color'

Ah bah je ne savais pas que j'avais ça ?!!!

Bon, en utilisant le ls "pur" (chemin complet), ça fonctionne.

Oups.
Avec l'alias, ça ferait "ls --color -A". Mais certainement que le code
couleur (séquences d'échappement) le gêne...

Je suis confus, de vous avoir dérangé pour rien.
Le coup de l'alias est classique, et je n'y ai pourtant pas pensé...

Merci beaucoup en tous cas !

Avatar
gregg
Jacques L'helgoualc'h wrote:

Les fichiers i* peuvent alors ne pas apparaître en première colonne. Que
donne la commande alias ?


Il y avait effectivement un problème d'alias (cf un de mes posts, plus
haut).
alias ls='ls --color'

Je pense que ce sont les séquences d'échappement de "--color" qui
masquent le premier caractère (à moins que "--color" ne contiennent des
choses implicites, comme -C par exemple: je lis la page de man
attentivement).

C'est ennuyeux de redéfinir les commandes dans un script.
Enlever tous les aliases, donc. Avec une boucle ?

++

Avatar
Nicolas George
gregg wrote in message <41bdefc8$0$12730$:
alias ls='ls --color'


Souvent, on utilise --color=auto, pour que l'option ne soit active que si la
sortie est un terminal.

C'est ennuyeux de redéfinir les commandes dans un script.


Les alias sont normalement définis dans le fichier lu par les shells
interactifs, et n'influent donc pas sur les scripts.

Avatar
gregg
Nicolas George wrote:


Les alias sont normalement définis dans le fichier lu par les shells
interactifs, et n'influent donc pas sur les scripts.


C'est ce qu'il me semblait, pourtant en utilisant la commande complète
cela fonctionne.

Notons que j'ai quelques aliases dont je ne soupçonnais pas l'existence
(ils ne sont pas dans mon .profile, ni aucun des fichiers rc pour les
shells)

dir, v, vdir, ls...

Je me demande où ils sont définis (j'ai regardé dans /etc et
/etc/profile.d/ mais sans résultat)

Il s'agit d'un système GNU/Linux Slackware 10.0 (à jour jusqu'à la
maladie de Patrick Volkerding)

Bref.
Apparemment, ce sont des executables dans /usr/bin, pourtant Bash les
voit comme des aliases...
J'avoue être perdu !

Avatar
Christian CAMIER
gregg wrote:

Bref.
Apparemment, ce sont des executables dans /usr/bin, pourtant Bash les
voit comme des aliases...
J'avoue être perdu !


Dans /etc/profile, tu as une portion :

if [ "$SHELL" = "/bin/zsh" ]; then
eval `dircolors -z`
elif [ "$SHELL" = "/bin/ash" ]; then
eval `dircolors -s`
else
eval `dircolors -b`
fi

Si tu tappes sur ton clavier (pour le cas de BASH) :

$ dircolors -b
LS_COLORS='... plein de choses ...';
export LS_COLORS;
LS_OPTIONS=' --color=auto -F -b -T 0';
export LS_OPTIONS;
alias ls='/usr/bin/ls $LS_OPTIONS';
alias dir='/usr/bin/ls $LS_OPTIONS --format=vertical';
alias vdir='/usr/bin/ls $LS_OPTIONS --format=long';
alias d=dir;
alias v=vdir;

Maintenant tu sais où ils sont définis tes alias.
Perso, j'ai mis ces lignes en commentaire.

Avatar
FAb
Christian CAMIER writes:

gregg wrote:

Bref.
Apparemment, ce sont des executables dans /usr/bin, pourtant Bash les voit
comme des aliases...
J'avoue être perdu !


Dans /etc/profile, tu as une portion :


Sous linux, et suivant les distribs t'en as aussi dans /etc/bashrc


FAb


Avatar
Christian CAMIER
FAb wrote:
Christian CAMIER writes:


gregg wrote:


Bref.
Apparemment, ce sont des executables dans /usr/bin, pourtant Bash les voit
comme des aliases...
J'avoue être perdu !


Dans /etc/profile, tu as une portion :



Sous linux, et suivant les distribs t'en as aussi dans /etc/bashrc


FAb
En bref, pour savoir ou sont les alias, taper simplement :

$ bash -xv -l
Puis décortiquer les traces ... Bon jeu de piste :)



Avatar
Stephane Chazelas
2004-12-14, 00:21(+01), Christian CAMIER:
gregg wrote:

Bref.
Apparemment, ce sont des executables dans /usr/bin, pourtant Bash les
voit comme des aliases...
J'avoue être perdu !


Dans /etc/profile, tu as une portion :

if [ "$SHELL" = "/bin/zsh" ]; then
eval `dircolors -z`
elif [ "$SHELL" = "/bin/ash" ]; then
eval `dircolors -s`
else
eval `dircolors -b`
fi
[...]


Ca devrait etre:

eval "`dircolors -<option>`"

C'est un bug a signaler aux mainteneurs de la distribution/du
systeme, a mon avis.

--
Stephane


1 2