Operações Avançadas com Strings no Bash
Neste passo final, exploraremos operações de string mais avançadas no Bash, incluindo manipulação de strings, correspondência de padrões e substituição. Essas técnicas permitirão que você execute tarefas complexas de processamento de texto em seus scripts.
Funções de Manipulação de Strings
O Bash fornece vários mecanismos embutidos para manipular strings. Vamos explorar essas operações:
-
Abra o arquivo string_ops.sh no editor:
- Navegue até
~/project/string_formatting no explorador de arquivos
- Clique em
string_ops.sh para abri-lo
-
Substitua o conteúdo pelo seguinte código:
#!/bin/bash
## Comprimento da string
message="Hello, Bash scripting world!"
echo "Original message: $message"
echo "Length of message: ${#message} characters"
## Extraindo substrings
## Sintaxe: ${string:position:length}
echo "First 5 characters: ${message:0:5}"
echo "Characters 7-11: ${message:7:5}"
echo "From position 13 to end: ${message:13}"
## Pesquisando e substituindo dentro de strings
filename="report.txt.backup"
echo "Original filename: $filename"
## Substituir a primeira ocorrência
echo "Replace first occurrence of 'txt' with 'pdf': ${filename/txt/pdf}"
## Substituir todas as ocorrências
text="one two one two three"
echo "Original text: $text"
echo "Replace all occurrences of 'one' with '1': ${text//one/1}"
## Substituir no início da string
echo "Replace 'one' at beginning: ${text/#one/1}"
## Substituir no final da string
echo "Replace 'three' at end: ${text/%three/3}"
-
Salve o arquivo pressionando Ctrl+S ou selecionando "File" > "Save" no menu
-
Agora, vamos tornar o arquivo executável e executá-lo:
chmod +x string_ops.sh
./string_ops.sh
Você deve ver a saída mostrando várias operações de manipulação de strings:
Original message: Hello, Bash scripting world!
Length of message: 29 characters
First 5 characters: Hello
Characters 7-11: Bash
From position 13 to end: scripting world!
Original filename: report.txt.backup
Replace first occurrence of 'txt' with 'pdf': report.pdf.backup
Original text: one two one two three
Replace all occurrences of 'one' with '1': 1 two 1 two three
Replace 'one' at beginning: 1 two one two three
Replace 'three' at end: one two one two 3
Conversão de Case (Maiúsculas e Minúsculas)
O Bash também fornece mecanismos para alterar o case do texto. Vamos adicionar exemplos de conversão de case:
- Adicione o seguinte código ao final de
string_ops.sh:
## Conversão de case
uppercase="HELLO WORLD"
lowercase="hello world"
mixed="Hello World"
## Convertendo para maiúsculas
echo "Original: $lowercase"
echo "Uppercase: ${lowercase^^}"
## Convertendo para minúsculas
echo "Original: $uppercase"
echo "Lowercase: ${uppercase,,}"
## Convertendo o primeiro caractere para maiúscula
echo "Original: $lowercase"
echo "First character uppercase: ${lowercase^}"
## Convertendo o primeiro caractere para minúscula
echo "Original: $mixed"
echo "First character lowercase: ${mixed,}"
- Salve o arquivo e execute-o novamente:
./string_ops.sh
A saída adicional deve mostrar exemplos de conversão de case:
Original: hello world
Uppercase: HELLO WORLD
Original: HELLO WORLD
Lowercase: hello world
Original: hello world
First character uppercase: Hello world
Original: Hello World
First character lowercase: hello World
Vamos adicionar exemplos de técnicas de string trimming e formatação:
- Adicione o seguinte código ao final de
string_ops.sh:
## String trimming
path=" /usr/local/bin/ "
echo "Original path with spaces: '$path'"
echo "Trimmed path: '${path// /}'" ## Remove all spaces
## Removendo prefixos e sufixos
filename="archive.tar.gz"
echo "Original filename: $filename"
echo "Without .tar.gz extension: ${filename%.tar.gz}"
echo "Without any extension: ${filename%%.*}"
echo "Extract extension: ${filename#*.}"
echo "Extract full extension: ${filename##*.}"
## Padding strings
number=42
printf "Number with leading zeros (5 digits): %05d\n" $number
name="Bob"
printf "Name padded to 10 characters: %-10s|\n" $name
- Salve o arquivo e execute-o novamente:
./string_ops.sh
A saída adicional deve mostrar exemplos de trimming e formatação:
Original path with spaces: ' /usr/local/bin/ '
Trimmed path: '/usr/local/bin/'
Original filename: archive.tar.gz
Without .tar.gz extension: archive
Without any extension: archive
Extract extension: tar.gz
Extract full extension: gz
Number with leading zeros (5 digits): 00042
Name padded to 10 characters: Bob |
Exemplo Prático: Analisador de Log
Vamos criar um exemplo prático que usa operações avançadas de string para analisar e formatar entradas de log:
- Adicione o seguinte código ao final de
string_ops.sh:
## Exemplo prático: Analisador de log
echo -e "\n--- Log Parser Example ---\n"
## Entradas de log de exemplo
log_entries=(
"[2023-10-25 08:15:22] INFO: Application started"
"[2023-10-25 08:16:45] WARNING: High memory usage detected"
"[2023-10-25 08:17:30] ERROR: Database connection failed"
"[2023-10-25 08:18:10] INFO: Backup process initiated"
"[2023-10-25 08:19:55] ERROR: Out of disk space"
)
## Analisar e formatar entradas de log
for entry in "${log_entries[@]}"; do
## Extrair timestamp (tudo entre [ e ])
timestamp=${entry#*[}
timestamp=${timestamp%%]*}
## Extrair nível de log (INFO, WARNING, ERROR)
level=${entry#*] }
level=${level%%:*}
## Extrair mensagem
message=${entry#*: }
## Formatar com base no nível de log
case $level in
"INFO")
printf "%-20s [\033[36m%-7s\033[0m] %s\n" "$timestamp" "$level" "$message"
;;
"WARNING")
printf "%-20s [\033[33m%-7s\033[0m] %s\n" "$timestamp" "$level" "$message"
;;
"ERROR")
printf "%-20s [\033[31m%-7s\033[0m] %s\n" "$timestamp" "$level" "$message"
;;
esac
done
- Salve o arquivo e execute-o:
./string_ops.sh
A seção de saída final deve mostrar entradas de log formatadas com cores diferentes com base no nível de log:
--- Log Parser Example ---
2023-10-25 08:15:22 [INFO ] Application started
2023-10-25 08:16:45 [WARNING] High memory usage detected
2023-10-25 08:17:30 [ERROR ] Database connection failed
2023-10-25 08:18:10 [INFO ] Backup process initiated
2023-10-25 08:19:55 [ERROR ] Out of disk space
Este exemplo de analisador de log demonstra como a combinação de várias operações de string com formatação e códigos de cores pode transformar dados de texto brutos em um formato mais legível e estruturado. Tais técnicas são extremamente úteis ao desenvolver scripts para análise de log, processamento de dados ou relatórios.