Dentro de aspas duplas, os caracteres $"\'
permanecem especiais. Você pode estar confundindo-as com aspas simples: dentro de aspas simples, todos os caracteres são interpretados literalmente, exceto por '
em si, que termina com a string literal.
$ cat /opt/jira/.subversion/config | grep -P "$[^#]"
zsh: bad math expression: operand expected at '^#'
$[…]
é uma sintaxe obsoleta para expressões aritméticas, que pode ser escrita $((…))
como em shells POSIX. ^#
não é uma expressão aritmética válida; o shell esperava um operando, como um número ou um nome de variável.
[1] broken pipe cat /opt/jira/.subversion/config
Como o segundo comando no pipeline foi interrompido antes de consumir toda a saída de cat
(ele nem começou a ler), o primeiro comando ( cat
) recebeu um SIGPIPE .
$ cat /opt/jira/.subversion/config | grep -P "\$[^#]"
$ cat /opt/jira/.subversion/config | grep -P "\$#"
A barra invertida diz ao shell para interpretar o próximo caractere literalmente, então grep
viu o padrão $[^#]
ou $#
. Estes padrões significam “o fim da linha seguido por qualquer caractere exceto #
” e “o final da linha seguido por #
” respectivamente. Nenhum desses padrões pode corresponder a qualquer coisa.
$ cat /opt/jira/.subversion/config | grep -P "$#"
$#
é o número de argumentos posicionais ( $1
, $2
,…, acessível coletivamente como $@
), ou seja, os argumentos passados na linha de comando do shell ou os argumentos para uma função se dentro de um função. Em um shell interativo, geralmente não há argumentos posicionais, portanto, grep
viu o padrão 0
.
O padrão que você está procurando é ^[^#]
( ^
corresponde no início de uma linha). A menos que você queira incluir o valor de uma variável shell ou a saída de um comando no padrão, use aspas simples (não importa aqui, mas é importante para alguns padrões, especialmente aqueles que contêm uma barra invertida ou um $
). Você não precisa de -P
, pois esse padrão é escrito da mesma forma em expressões regulares básicas (% normalgrep
), expressões regulares extensas ( grep -E
) e expressões regulares perl ( grep -P
).
$ </opt/jira/.subversion/config grep '^[^#]'