Erros de script Bash ao tentar grep -v -q na instrução if

1

Estou tentando escrever um script que faz algo quando a linha de leitura não inclui um símbolo * na linha.

Eu tentei o seguinte sem sucesso:

  1. if [ grep -v -q '*' ] , que resulta em muitos erros de argumentos

  2. if [ "$(grep -v -q '*')" -eq '0' ]; que resulta em um erro esperado do operador unário.

O que estou fazendo de errado?

    
por SemicolonExpected 28.02.2018 / 05:08

1 resposta

2

Uma instrução if aceitará qualquer coisa que produza status de saída, portanto, um shell embutido como [ ou test - ou um arquivo de disco como grep . Você pode usar os dois:

if [ "$(grep -c '*' file)" = 0 ]
then
  echo 'star symbol not found'
fi

mas não é realmente necessário:

if ! grep -q '*' file
then
  echo 'star symbol not found'
fi

Ou:

while read x
do
  if ! grep -q '*' <<eof
$x
eof
  then
    printf '%s does not contain star symbol\n' "$x"
  fi  
done < file

Ou:

awk '!/\*/ {print $0, "does not contain star symbol"}' file
    
por 28.02.2018 / 05:18

Tags