Je veux grep pour la chaîne qui commence par un tiret / trait d'union, comme -X
dans un fichier, mais cela confond cela comme argument de ligne de commande.
J'ai essayé:
grep "-X"
grep \-X
grep '-X'
Utilisation:
grep -- -X
En relation: Que signifie un double tiret nu? (merci à nutty à propos de natty ).
--
signifie ou fait: unix.stackexchange.com/questions/11376/…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
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:
Je l'invoque comme:
Vous avez eu l'idée.
la source
grep -e -X
fera l'affaire.la source
-P
(mais c'est une autre histoire et ne s'applique pas ici)).grep -e '--cut here--' *
recherche toutes les lignes correspondantes‘--cut here--’
. Sans -e, grep tenterait d'analyser‘--cut here--’
une liste d'options.la source
Je n'ai pas accès à une machine Solaris, mais
grep "\-X"
fonctionne pour moi sur Linux.la source
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.
la source
Si vous utilisez un autre utilitaire qui transmet un seul argument à grep, vous pouvez utiliser:
la source
vous pouvez utiliser nawk
la source
J'espère que celui-ci servira votre objectif.
la source
grep "^ -X" fichier
Il va grep et sélectionner toutes les lignes du fichier. ^ dans le grep "^" indique une ligne commençant par
la source
-
, pas des lignes.