Bash script – Manipulação de STRINGS
Bash script – Manipulação de STRINGS
Neste artigo, exploraremos a manipulação de strings em scripts Bash, um tópico fundamental em programação. Em ciência da computação, uma “string” é um conjunto de caracteres armazenados em uma variável. Em muitos casos, é necessário manipular strings de várias maneiras para processar seu conteúdo. Neste artigo, explicarei como você pode determinar o comprimento de uma string, extrair partes de uma string e substituir partes dela por outros valores.
No Bash, você pode obter o conteúdo de uma variável usando a seguinte sintaxe, além da forma mais comum de referência de variáveis:
${nome_da_variável}
Nesse caso, o nome da variável é colocado entre chaves. Essa sintaxe é comumente usada quando você deseja manipular a string de alguma forma.
Comprimento de uma string
Em muitos cenários, é necessário saber quantos caracteres uma string contém, ou seja, seu comprimento. Isso pode ser útil para comparar variáveis, verificar se o resultado de um processo está correto ou em outras situações semelhantes. Para contar o número de caracteres em uma string no Bash, você pode usar a seguinte sintaxe:
${#nome_da_variável}
Nesse caso, o caractere “#” precede o nome da variável, permitindo que você obtenha o número de caracteres em vez do conteúdo da string.
No script a seguir, demonstro o uso desse conceito:
#!/bin/bash
# Esta variável guarda uma determinada frase.
variavel1="Uma frase de exemplo!"
# Esta variável guarda um caminho no sistema de arquivos.
variavel2="/home/miguel"
# Esta variável guarda um número, que no Bash é apenas representado como texto.
variavel3=888
# Escrever o número de caracteres de cada uma dessas strings.
echo "O número de caracteres da variável 1 é: ${#variavel1}"
echo "O número de caracteres da variável 2 é: ${#variavel2}"
echo "O número de caracteres da variável 3 é: ${#variavel3}"
Ao executar o script, obtemos a seguinte saída:
miguel@LUA:~/Scripts/bash$ ./var_manipulação_ex_1.sh
O número de caracteres da variável 1 é: 21
O número de caracteres da variável 2 é: 12
O número de caracteres da variável 3 é: 3
Obter parte de uma string
Às vezes, você precisa extrair uma parte específica de uma string em seus scripts. A sintaxe para fazer isso é a seguinte:
${nome_da_variável:posição:comprimento}
- “nome_da_variável” é a variável da qual você deseja extrair a substring.
- “posição” é a posição inicial a partir da qual você deseja obter os caracteres na variável.
- “comprimento” é o número de caracteres que você deseja obter da variável.
No script a seguir, obtenho o número de identificação e o código postal de uma frase:
#!/bin/bash
# Esta variável guarda uma frase com um número de identificação
# e um código postal.
variavel1="O número de identificação é 255555552 e o código postal é 2710-501"
# Obter o número de identificação.
echo "O número de identificação é: ${variavel1:28:9}"
# Obter o código postal.
echo "O código postal é: ${variavel1:58}"
Ao executar o script, obtemos a seguinte saída:
miguel@LUA:~/Scripts/bash$ ./var_manipulação_ex_2.sh
O número de identificação é: 255555552
O código postal é: 2710-501
Observe que, ao obter o código postal, não foi especificado um comprimento, o que resultou na extração de todos os caracteres a partir da posição especificada.
Remover parte de uma string por separador
No Bash, você pode remover parte do conteúdo de uma variável com base em um separador. Esse separador pode ser qualquer caractere ou conjunto de caracteres, incluindo expressões. Existem duas formas de fazer isso: a forma curta e a forma longa.
Forma curta
Na forma curta, você pode remover parte do conteúdo de duas maneiras: do início para o fim ou do fim para o início. A sintaxe é a seguinte:
- Para remover do início para o fim:
${nome_da_variável#separador}
- Para remover do fim para o início:
${nome_da_variável%separador}
O caractere “#” é usado quando você deseja remover conteúdo do início para o fim, enquanto o caractere “%” é usado quando deseja remover conteúdo do fim para o início. No exemplo a seguir, vou demonstrar como remover o nome e a idade de uma frase separados por “dois pontos”:
#! /bin/bash
# Esta variável guarda uma frase com um número de identificação,
# um número da biblioteca, um número de estudante e uma idade,
# todos separados por dois pontos.
dados="miguel:43432434:234234:38"
# Remover o nome: Remove tudo a partir do início até encontrar o caractere ":"
echo "Remove o nome: ${dados#*:}"
# Remover a idade: Remove tudo a partir do fim até encontrar o caractere ":"
echo "Remove a idade: ${dados%:*}"
Ao executar o script, obtemos a seguinte saída:
miguel@LUA:~/Scripts/bash$ ./var_manipulação_ex_3.sh
Remove o nome: 43432434:234234:38
Remove a idade: miguel:43432434:234234
Observe que o caractere “*” é usado como uma expressão que representa qualquer caractere e qualquer número de caracteres, permitindo que você remova tudo até encontrar o caractere de dois pontos.
Forma longa
Na forma longa, você também pode remover parte do conteúdo do início para o fim ou do fim para o início, mas essa forma remove todas as ocorrências da expressão especificada. A sintaxe é a seguinte:
- Para remover do início para o fim:
${nome_da_variável##separador}
- Para remover do fim para o início:
${nome_da_variável%%separador}
A diferença entre a forma curta e a forma longa é que a forma longa remove todas as ocorrências encontradas da expressão. Você só pode usar expressões na forma longa, pois não seria prático ter que especificar todo
o conteúdo que deseja remover.
No exemplo a seguir, vou demonstrar como obter o nome e a idade de uma frase separados por “dois pontos” usando a forma longa:
#! /bin/bash
# Esta variável guarda uma frase com um número de identificação,
# um número da biblioteca, um número de estudante e uma idade,
# todos separados por dois pontos.
dados="miguel:43432434:234234:38"
# Obter o nome da pessoa: Remove tudo do início até encontrar o último ":"
echo "O nome é: ${dados%%:*}"
# Obter a idade: Remove tudo do início até encontrar o último ":"
echo "A idade é: ${dados##*:}"
Ao executar o script, obtemos a seguinte saída:
miguel@LUA:~/Scripts/bash$ ./var_manipulação_ex_4.sh
O nome é: miguel
A idade é: 38
Substituição de conteúdo
No Bash, é possível substituir partes do conteúdo de uma variável por outro conteúdo. Isso é feito procurando uma expressão, caractere ou conjunto de caracteres no conteúdo da variável e, se encontrado, substituindo-o por outro conteúdo. Existem várias formas de substituição de conteúdo em uma variável.
Substituir uma ocorrência
Para substituir uma ocorrência de uma expressão específica no conteúdo de uma variável, você pode usar a seguinte sintaxe:
${nome_da_variável/expressão_a_achar/substituição}
No exemplo a seguir, substituímos o nome “Miguel” em uma frase por vários outros nomes:
#! /bin/bash
# Esta variável guarda uma simples frase.
variavel1="O Miguel gosta de animais."
# Substituir o nome "Miguel" por outros nomes.
echo ${variavel1/Miguel/"João"}
echo ${variavel1/Miguel/"Marco"}
echo ${variavel1/Miguel/"Daniel"}
A saída do script será:
miguel@LUA:~/Scripts/bash$ ./var_manipulação_ex_5.sh
O João gosta de animais.
O Marco gosta de animais.
O Daniel gosta de animais.
Nesse exemplo, “Miguel” foi substituído por vários outros nomes na frase.
Substituir todas as ocorrências
Se você deseja substituir todas as ocorrências de uma expressão específica por outro conteúdo, pode usar a seguinte sintaxe:
${nome_da_variável//expressão_a_achar/substituição}
No exemplo a seguir, substituímos todas as ocorrências de “Miguel” em uma frase por vários outros nomes:
#! /bin/bash
# Esta variável guarda uma frase.
variavel1="O Miguel gosta de animais. O animal preferido do Miguel é o gato."
# Substituir todas as ocorrências de "Miguel" por outros nomes.
echo ${variavel1//Miguel/"João"}
echo ${variavel1//Miguel/"Marco"}
echo ${variavel1//Miguel/"Daniel"}
A saída do script será:
miguel@LUA:~/Scripts/bash$ ./var_manipulação_ex_6.sh
O João gosta de animais. O animal preferido do João é o gato.
O Marco gosta de animais. O animal preferido do Marco é o gato.
O Daniel gosta de animais. O animal preferido do Daniel é o gato.
Observe que todas as ocorrências de “Miguel” na frase foram substituídas pelos nomes especificados.
Substituir no início do conteúdo
Para substituir uma expressão no início do conteúdo de uma variável, use a seguinte sintaxe:
${nome_da_variável/#expressão_a_achar/substituição}
No exemplo a seguir, substituímos o número de carros em uma frase por outros números:
#! /bin/bash
# Esta variável guarda uma frase que começa com o número de carros.
variavel1="5 carros pretos."
# Substituir o número por outro número no início da frase.
echo ${variavel1/#5/2}
echo ${variavel1/#5/7}
echo ${variavel1/#5/500}
A saída do script será:
miguel@LUA:~/Scripts/bash$ ./var_manipulação_ex_7.sh
2 carros pretos.
7 carros pretos.
500 carros pretos.
Observe que o “5” no início da frase foi substituído por outros números.
Substituir no final do conteúdo
Para substituir uma expressão no final do conteúdo de uma variável, use a seguinte sintaxe:
${nome_da_variável/%expressão_a_achar/substituição}
No exemplo a seguir, substituímos o número de carros no final de uma frase por outros números:
#! /bin/bash
# Esta variável guarda uma frase que termina com o número de carros.
variavel1="Carros vermelhos: 5"
# Substituir o número por outro número no final da frase.
echo ${variavel1/%5/3}
echo ${variavel1/%5/8}
echo ${variavel1/%5/200}
A saída do script será:
miguel@LUA:~/Scripts/bash$ ./var_manipulação_ex_8.sh
Carros vermelhos: 3
Carros vermelhos: 8
Carros vermelhos: 200
Para testar os scripts, faça o download deles e coloque-os em uma pasta em seu diretório pessoal. Certifique-se de dar permissão de execução a todos eles. Aqui está um exemplo de como fazer isso (ajuste para o seu usuário e pasta onde os scripts foram salvos):
miguel@LUA:~$ cd Scripts/bash
miguel@LUA:~/Scripts/bash$ chmod +x *
miguel@LUA:~/Scripts/bash$ ./var_manipulação_ex_1.sh
Conclusão
A manipulação de STRINGS é uma parte essencial da construção de scripts Bash. No Bash, tudo é tratado como uma string, mesmo números são representados como texto. Compreender como trabalhar com texto de várias maneiras é crucial e é uma habilidade frequentemente utilizada na programação do mundo real.
Lembre-se de que existem muitas outras maneiras de manipular texto usando comandos externos, como awk
e sed
, entre outros. Este artigo cobriu apenas as técnicas internas fornecidas pelo próprio Bash. Em artigos futuros, exploraremos técnicas de manipulação de texto usando comandos externos.