Réponses:
Utilisation:
grep -- -X
En relation: Que signifie un double tiret nu? (merci à nutty à propos de natty ).
ARGS="-a -b -c"
grep -- "$ARGS"
grep -- "--name awesome"
.
Le tiret est un caractère spécial dans Bash, comme indiqué sur http://tldp.org/LDP/abs/html/special-chars.html#DASHREF . Donc, échapper à cela une fois vous permet de dépasser Bash, mais Grep a toujours sa propre signification pour les tirets (en fournissant des options).
Vous devez donc vraiment y échapper deux fois (si vous préférez ne pas utiliser les autres réponses mentionnées). Les éléments suivants fonctionneront / devraient fonctionner
grep \\-X
grep '\-X'
grep "\-X"
Une façon d'essayer comment Bash passe des arguments à un script / programme est de créer un script .sh qui fait écho à tous les arguments. J'utilise un script appelé echo-args.sh pour jouer de temps en temps, tout ce qu'il contient est:
echo $*
Je l'invoque comme:
bash echo-args.sh \-X
bash echo-args.sh \\-X
bash echo-args.sh "\-X"
Vous avez eu l'idée.
grep -e -X
fera l'affaire.
-P
(mais c'est une autre histoire et ne s'applique pas ici)).
grep -- -X
grep \\-X
grep '\-X'
grep "\-X"
grep -e -X
grep [-]X
La bonne façon serait d'utiliser "-" pour arrêter le traitement des arguments, comme déjà mentionné. Cela est dû à l'utilisation de getopt_long (fonction C GNU de getopt.h) dans la source de l'outil.
C'est pourquoi vous remarquez le même phénomène sur d'autres outils de ligne de commande; puisque la plupart d'entre eux sont des outils GNU et utilisent cet appel, ils présentent le même comportement.
En guise de remarque - getopt_long est ce qui nous donne le bon choix entre -rlo et --really_long_option et la combinaison d'arguments dans l'interpréteur.
vous pouvez utiliser nawk
$ nawk '/-X/{print}' file
ls -l | grep "^-"
J'espère que celui-ci servira votre objectif.
grep "^ -X" fichier
Il va grep et sélectionner toutes les lignes du fichier. ^ dans le grep "^" indique une ligne commençant par
-
, pas des lignes.
--
signifie ou fait: unix.stackexchange.com/questions/11376/…