web-dev-qa-db-fra.com

Comment grep pour le symbole dollar ($)?

% cat temp
$$$ hello1
$$  hello2
    hello3
##  hello4
    hello5 $$$
% cat temp | grep "$$$"
Illegal variable name.
% cat temp | grep "\$\$\$"
Variable name must contain alphanumeric characters.
%

Je veux grep pour $$$ et j’attends que le résultat soit

% cat temp | grep <what should go here?>
$$$ hello1
    hello5 $$$
%

Pour différencier, j'ai marqué l'invite comme étant %.

  • Quel est le problème ici?
  • Qu'est-ce que la chaîne grep be?
63
Lazer

Le problème est que le shell développe les noms de variables dans des chaînes entre guillemets. Donc, pour "$$$", il essaie de lire un nom de variable commençant par le premier $.

En revanche, entre guillemets simples, les variables ne sont pas développées. Par conséquent, '$$$' fonctionnerait - sans le fait que $ est un caractère spécial dans les expressions régulières indiquant la fin de la ligne. Donc, il doit être échappé: '\$\$\$'.

86
Konrad Rudolph

Lorsque vous utilisez des guillemets doubles " ou aucun, utilisez double\: "\\\$\\\$\\\$"

cat t | grep \\\$\\\$\\\$ 

si vous utilisez des guillemets simples, vous pouvez utiliser:

cat t | grep '\$\$\$'
22
Gadolin
$ grep '\$\$\$' temp
$$$ hello1
hello5 $$$

Il y a un "chat" superflous dans votre commande. 

7
jowi

Travaille pour moi:

user@Host:~$ cat temp | grep '\$\$\$'
$$$ hello1
hello5 $$$
user@Host:~$ 
5
tdammers

Que diriez-vous de ^.*[$]{3}.*$

0
Florian Peschka

Même problème avec cette commande

complete -W "\`grep -oE '^[a-zA-Z0-9_.-]+:([^=]|$)' Makefile \`"

Nom de variable illégal.

0
haykp