% 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 %
.
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é: '\$\$\$'
.
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 '\$\$\$'
$ grep '\$\$\$' temp
$$$ hello1
hello5 $$$
Il y a un "chat" superflous dans votre commande.
Travaille pour moi:
user@Host:~$ cat temp | grep '\$\$\$'
$$$ hello1
hello5 $$$
user@Host:~$
Que diriez-vous de ^.*[$]{3}.*$
Même problème avec cette commande
complete -W "\`grep -oE '^[a-zA-Z0-9_.-]+:([^=]|$)' Makefile \`"
Nom de variable illégal.