Como manipular strings no Bash no Linux

Laptop em um fundo azul mostrando um prompt de comando do Linux.

Se há uma coisa com a qual o Linux está bem equipado, são os utilitários para manipulação de strings. Mas também há todo um conjunto de funcionalidades integradas no shell Bash . Veja como ele é usado.

Manipulação de cordas

O ecossistema Linux está repleto de ferramentas fantásticas para trabalhar com texto e strings. Isso inclui  awkgrepsedcut . Para qualquer disputa de texto pesado, essas devem ser suas escolhas.

Às vezes, porém, é conveniente usar os recursos integrados do shell, especialmente quando você está escrevendo um script curto e simples. Se o seu script for compartilhado com outras pessoas e executado em seus computadores, usar a funcionalidade Bash padrão significa que você não precisa se perguntar sobre a presença ou versão de qualquer um dos outros utilitários.

Se você precisa do poder dos utilitários dedicados, use-os sem dúvida. É para isso que eles existem. Mas muitas vezes o seu script e o Bash podem fazer o trabalho sozinhos.

Como eles são integrados ao Bash, você pode usá-los em scripts ou na linha de comando. Usá-los em uma janela de terminal é uma maneira rápida e conveniente de criar protótipos de seus comandos e aperfeiçoar a sintaxe. Evita o ciclo de edição, salvamento, execução e depuração.

Criando e trabalhando com variáveis ​​de string

Tudo o que precisamos para declarar uma variável e atribuir uma string a ela é nomear a variável, usar o sinal de igual

 = 

e forneça a string. Se houver espaços em sua string, coloque-a entre aspas simples ou duplas. Certifique-se de que não haja espaços em branco em nenhum dos lados do sinal de igual.

Recomendado:  O que há de novo no iOS 14 (e iPadOS 14, watchOS 7, AirPods, mais)

my_string="Olá, mundo geek de instruções."

echo $minha_string

Criando e escrevendo uma variável de string

Depois de criar uma variável, esse nome de variável é adicionado à lista de palavras de conclusão de tabulação do shell. Neste exemplo, digitar “my_” e pressionar a tecla “Tab” inseriu o nome completo na linha de comando.

Variáveis ​​somente leitura

Existe um declarecomando que podemos usar para declarar variáveis. Em casos simples, você realmente não precisa dele, mas usá-lo permite usar algumas das opções do comando. Provavelmente o que você mais usaria é a -ropção (somente leitura). Isso cria uma variável somente leitura que não pode ser alterada.

declare -r read_only_var="Esta é uma string imutável!"

Se tentarmos atribuir um novo valor a ele, ele falhará.

read_only_var="Uma nova string..."

Falha ao alterar uma variável de string somente leitura

Escrevendo na janela do terminal

Podemos escrever várias strings na janela do terminal usando  echo  ou  printf  para que pareçam ser uma string. E não estamos limitados às nossas próprias variáveis ​​de strings, podemos incorporar variáveis ​​de ambiente em nossos comandos.

user_account="Sua conta de usuário é:"

echo $user_account $USER

Escrevendo duas strings na janela do terminal como se fossem uma string

Concatenando Strings

O operador mais-igual,  +=, permite “adicionar” duas strings juntas. É chamado de concatenação.

user_account="Sua conta de usuário é:"

conta_usuário+=$USUÁRIO

eco $ conta_usuário

Concatenando strings com +=

Observe que você não recebe um espaço adicionado automaticamente entre strings concatenadas. Se precisar de um espaço, você precisa colocá-lo explicitamente no final da primeira string ou no início da segunda.

user_account="Sua conta de usuário é: "

conta_usuário+=$USUÁRIO

eco $ conta_usuário

Adicionando um espaço extra antes de usar += para concatenar duas strings

Lendo a entrada do usuário

Além de criar variáveis ​​de string cujo conteúdo é definido como parte de sua declaração, podemos ler a entrada do usuário em uma variável de string.

O readcomando lê a entrada do usuário. A -popção (prompt) grava um prompt na janela do terminal. A entrada do usuário é armazenada na variável string. Neste exemplo, a variável é chamada user_file.

read -p "Abrir qual arquivo?" user_file

eco $ arquivo_usuário

Lendo a entrada da string do usuário

Se você não fornecer uma variável de string para capturar a entrada, ela ainda funcionará. A entrada do usuário será armazenada em uma variável chamada REPLY.

leia -p "Abrir qual arquivo?"

echo $REPLY

Lendo a entrada do usuário sem fornecer uma variável de string

Geralmente é mais conveniente fornecer sua própria variável e dar a ela um nome significativo.

Manipulando Strings

Agora que temos nossas strings, sejam elas definidas no momento da criação, lidas a partir da entrada do usuário ou criadas pela concatenação de strings, podemos começar a fazer coisas com elas.

Recomendado:  Os melhores acessórios para iPad de 2021

Encontrando o comprimento da corda

Se for importante ou útil saber o comprimento de uma string, podemos obtê-lo precedendo o nome da variável com um #símbolo de hash ” “.

my_string="Existem 39 caracteres nesta string."

eco ${#minha_string}

Obtendo o comprimento de uma string

Extraindo Substrings por Deslocamentos de Caracteres

Podemos extrair uma substring de uma variável de string fornecendo um ponto inicial dentro da string e um comprimento opcional. Se não fornecermos um comprimento, a substring conterá tudo, desde o ponto inicial até o último caractere.

O ponto inicial e o comprimento seguem o nome da variável, com dois pontos ” :” entre eles. Observe que os caracteres em uma variável de string são numerados começando em zero.

long_string="Frankenstein ou o Prometeu Moderno"

substring=${long_string:0:12}

eco $substring

eco ${long_string:27}

Extraindo uma substring do início de uma string

Outra variação permite descartar um número de letras do final da string. Efetivamente, ele permite definir um ponto inicial e usar um número negativo como comprimento. A substring conterá os caracteres do ponto inicial até o final da string, menos o número de caracteres que você especificou no número negativo.

minha_string="alfabética"

echo ${minha_string:5:-4}

Extraindo uma substring do meio de uma string

Em todos os casos, a variável string original permanece intacta. A substring “extraída” não é realmente removida do conteúdo da variável.

Extraindo Substrings por Delimitador

A desvantagem de usar deslocamentos de caracteres é que você precisa saber antecipadamente onde as substrings que deseja extrair estão localizadas na string.

Se sua string for delimitada por um caractere repetido, você poderá extrair substrings sem saber onde elas estão na string, nem quanto tempo elas têm.

Para pesquisar a partir do início da string, siga o nome da variável com sinais duplos de porcentagem,  %%, o caractere delimitador e um asterisco, *. As palavras nesta string são delimitadas por espaços.

Recomendado:  Como personalizar seu feed de favoritos no Instagram

long_string="primeiro segundo terceiro quarto quinto"

eco ${long_string%%' '*}

Extraindo uma substring da frente de uma string por delimitador

Isso retorna a primeira substring da frente da string que não contém o caractere delimitador. Isso é chamado de opção de substring curta.

A opção de substring longa retorna a parte frontal da string até a última substring delimitada. Em outras palavras, omite a última substring delimitada. Sintaticamente, a única diferença é que ele usa um único sinal de porcentagem ” %” no comando.

long_string="primeiro segundo terceiro quarto quinto"

echo ${long_string%' '*}

Extraindo uma substring longa da frente de uma string por delimitador

Como seria de esperar, você pode pesquisar da mesma maneira a partir do final da string. Em vez de um sinal de porcentagem, use um #sinal de hash ” ” e mova o delimitador para vir depois do asterisco ” *” no comando.

long_string = "this.long.string.of.words.is.delimited.by.periods"

eco ${long_string##*.}

Extraindo uma substring do final de uma string por delimitador

Esta é a opção de substring curta, ela corta a primeira substring encontrada na parte traseira da string que não contém o delimitador.

long_string = "this.long.string.of.words.is.delimited.by.periods"

echo ${long_string#*.}

Extraindo uma substring longa do final de uma string por delimitador

A opção de substring longa retorna a parte traseira da string até o primeiro delimitador da frente da string. Em outras palavras, omite a primeira substring delimitada.

Substituição de Substring

Trocar substrings por outras substrings é fácil. O formato é o nome da string, a substring que será substituída e a substring que será inserida, separados por /caracteres de barra ” “.

string="porco azul ri"

echo ${string/porco/cabra}

Substituindo uma substring em uma string

Para limitar a pesquisa ao final da string, preceda a string de pesquisa com um % caractere de sinal de porcentagem ” “.

string="porco azul ri"

echo ${string/%giggles/risos}

Substituindo uma substring no final de uma string

Para limitar a pesquisa ao início da string, preceda a string de pesquisa com um #caractere hash ” “.

string="porco azul ri"

echo ${string/#azul/amarelo}

Substituindo uma substring no início de uma string

Uma string é uma coisa flexível

Se uma string não estiver exatamente como você gostaria ou precisa, essas ferramentas ajudarão você a reformatá-la para que atenda às suas necessidades. Para transformações complicadas, use os utilitários dedicados, mas para pequenos ajustes use os shell integrados e evite a sobrecarga de carregar e executar uma ferramenta externa.