expr - Definição e uso do comando

Neste artigo será apresentado o comando expr. Este comando é utilizado para cálculos feitos em linha de comando em Shell Scripts. Funciona com expressões numéricas, expressões lógicas ou expressões regulares e Strings.

[ Hits: 12.846 ]

Por: Perfil removido em 29/06/2015


Cálculos com expressões regulares e strings



Após a demonstração do comando expr com expressões numéricas e lógicas, falta apresentar como ele trabalha com expressões regulares. No lugar de operadores, os procedimentos usam palavras-chave.

Exceto por um uso de ":" como um operador. Os dois pontos realizam uma busca por um padrão assim como a palavra-chave "match".

Palavras-chave:
  • + STRING :: interpreta o que vem depois de "+" como uma string, mesmo sendo palavra reservada ou um dos operadores.
  • STRING : REGEX :: realiza uma busca em STRING usando por padrão REGEX.
  • match STRING REGEX :: o mesmo que o anterior STRING : REGEX.
  • substr STRING POSIÇÂO TAMANHO :: pega um pedaço de STRING a partir de POSIÇÃO e com TAMANHO como número de caracteres. Não aceita parâmetros negativos.
  • index STRING CHARS :: retorna em qual posição de STRING foi encontrado o caractere CHARS.
  • length STRING :: conta a quantidade de caracteres presentes em STRING.

Exemplos com o operador ":" e com a palavra "match":

expr A\ ligeira\ raposa\ marrom\ saltou\ sobre\ o\ cão\ preguiçoso : ^[^a]
Ou:
expr match A\ ligeira\ raposa\ marrom\ saltou\ sobre\ o\ cão\ preguiçoso ^[^a]
Ambas retornam: 1

Como a regex pede que o primeiro caractere seja diferente de "a" (minúsculo) e o primeiro caractere da string não é um "a" (minúsculo), o retorno é 1, ou seja, verdadeiro para este padrão regex. Se não usar a palavra-chave "match", usa-se a sintaxe com dois pontos.

Além disso, a frase está com barras invertidas antes dos espaços em branco. Sem elas, o expr faria confusão e pensaria que há vários parâmetros na linha de comando.

Para usar melhor esta opção, recomendo um aprofundamento em regex. Isto foge do foco deste artigo.

Exemplo com a palavra-chave substr:

expr substr A\ ligeira\ raposa\ marrom\ saltou\ sobre\ o\ cão\ preguiçoso 18 6
Retorna: marrom

expr substr A\ ligeira\ raposa\ marrom\ saltou\ sobre\ o\ cão\ preguiçoso 17 6
Retorna: marro
Na verdade, ele retorna como primeiro caractere um espaço em branco seguido da palavra marro, porque a posição 17 da string é um caractere em branco. Para pegar a palavra "marrom" com este caractere em branco, seria necessário os parâmetros "17 7" por causa do tamanho da substring.

Exemplos com a palavra-chave "index":

expr index "A ligeira raposa marrom saltou sobre o cão preguiçoso" z
Retorna: 0, pois a string não possui a letra z.

expr index "A ligeira raposa marrom saltou sobre o cão preguiçoso" m
Retorna: 18, pois na string a primeira ocorrência da letra m ocorre na posição 18.

expr index "A ligeira raposa marrom saltou sobre o cão preguiçoso" coelho
Retorna: 3, pois de todas os caracteres do segundo parâmetro, a letra "l" é a que ocorre primeiro na string na posição de número 3.

expr index "A ligeira raposa marrom saltou sobre o cão preguiçoso" urso
Retorna: 8, pois de todas os caracteres do segundo parâmetro, a letra "r" é a que ocorre primeiro na string na posição de número 8.

Como se percebe, a busca é por caracteres e não por uma palavra.

Exemplo com a palavra-chave "length":

expr length STRING

Exemplo:

expr length "A ligeira raposa marrom saltou sobre o cão preguiçoso"
Retorna: 55. A frase está entre aspas por causa dos espaços em branco. Para não usar estas aspas, os espaços em branco devem trazer antes barras invertidas senão dará erro. Assim:

expr length A\ ligeira\ raposa\ marrom\ saltou\ sobre\ o\ cão\ preguiçoso
Retorna também: 55

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Cálculos com expressões lógicas
   3. Cálculos com expressões regulares e strings
   4. Resumo e revisão
   5. Saída de erros
Outros artigos deste autor

Um tour pelos players de vídeo para Linux

Instalação e configuração do gdesklets no Slackware 10

Network Mapper - Nmap

Configurando várias contas de e-mail no Thunderbird

Prevenção e rastreamento de um ataque

Leitura recomendada

Exemplos práticos de comandos com Parted

Programando em Shell Script para iniciantes

Reconhecimento de Voz no Linux

Simples e rápido: matando todos os processos de um usuário

Como matar um processo - kill, killall, pkill e xkill

  
Comentários
[1] Comentário enviado por fabio em 29/06/2015 - 16:29h

Muito bom o artigo! Esse comando é uma mão-na-roda.

[2] Comentário enviado por morvan em 06/07/2015 - 11:06h

Bom dia.
Excelente artigo. Ferramenta muito útil, ainda que pouquíssimo conhecida | utilizada; eu a utilizo, por exemplo, em scripts (claro) e também quando preciso calcular tamanho de partições (normalmente, os CD de Recuperação são muito parcimoniosos de ferramentas, como calculadora, gráfica, no caso, daí recorro ao Console do Sistema).
Morvan, Usuário GNU-Linux #433640. Seja Legal; seja Livre. Use GNU-Linux.

[3] Comentário enviado por removido em 09/07/2015 - 02:50h

Obrigado a todos.

Faltou uma coisa: o limite dos cálculos numéricos é apenas até números de 64 bits, positivos e negativos, com bit identificador de sinal.
--
http://s.glbimg.com/po/tt/f/original/2011/10/20/a97264_w8.jpg

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts