Combine com grep quando o padrão estiver na variável e contenha hífen “-”

10

Eu escrevi o seguinte comando para casar $ a com $ b, mas quando o valor inclui "-", recebo um erro. Como posso evitar isso?

# a="-Xmx5324m"
# b="-Xmx5324m"
#
#
#  echo "$a"  | grep -Fxc "$b"
grep: conflicting matchers specified
    
por yael 28.08.2017 / 19:19

2 respostas

19

Coloque -- antes do seu padrão:

echo "$a"  | grep -Fxc -- "$b"

-- especifica opções de fim de comando para muitos comandos / shell embutidos, após o qual os argumentos restantes são tratados como argumentos posicionais.

    
por 28.08.2017 / 19:25
13

Além da grande resposta do @sebasth , você poderia dizer que PATTERN com grep's -e opção para usar PATTERN como um padrão (aqui usando o operador <<< zsh here-string em vez de echo ; veja também printf '%s\n' "$a" para portabilidade).

grep -Fxc -e "$b" <<<"$a"

Ou tudo ao lado de outras opções.

grep -Fxce "$b" <<<"$a"

Como seu objetivo é de byte a byte, comparação de igualdade de strings use o comando [ .

if [ "$a" = "$b" ]

Ou se $a contiver $b , usando a construção [[...]] ksh:

if [[ $a == *"$b"* ]]

Ou mais portável em todos os shells parecidos com Bourne:

case $a in
  *"$b"*) ...
esac
    
por 28.08.2017 / 20:40