Manipulação de cordas de bash

Manipulação de cordas de bash
Em Bash, não muito diferente de qualquer outra linguagem de programação, um programa vive para colocar as coisas em baldes e nomeá -los para uso posterior. Esses baldes estão disponíveis para manipular durante toda a vida do programa ou até que não. O programa vive para manipular baldes.

O que é referido acima como baldes é o que chamamos de variáveis ​​na maioria das linguagens de programação. Além disso, construindo para o conceito básico de uma variável, um conceito que chamamos de digitação é introduzido.

A digitação é um nome para o comportamento esperado de armazenamento e atribuição de uma variável. Então, como isso se parece quando retornamos a baldes?

No mundo do pequeno balde, criamos para nossos programas, os baldes têm nomes. É isso.

Agora, suponha que nossos programas não tenham o luxo de ter um número infinito de sacolas Jetson à sua disposição para usar como baldes. Antes de um balde ser nomeado e preenchido com seu conteúdo, o programa deve decidir a forma e a constituição de cada balde que toca. Eu sei que parece um pouco exagerado, mas é um mal necessário. Todos os baldes estão vinculados pelo seu tipo.

Manipulação de strings em bash

Como isso se parece quando retornamos ao Bash?

Funções, matrizes e strings são armazenadas em variáveis. Bash usa o que chamamos de atributos para sinalizar mudanças nos comportamentos na tarefa. Apesar de haver um sistema para modificar o comportamento da atribuição variável, quando tudo se resume a isso, os valores são armazenados em variáveis ​​como strings.

Em Bash, um programa vive para colocar strings em variáveis ​​e nomeá -las para uso posterior. Essas cordas estão disponíveis para manipular durante toda a vida do programa. O programa vive para manipular strings.

Aqui vamos abordar a manipulação de cordas da Bash na respiração e o máximo possível de profundidade para estar acessível a leitores de todas as marcas e formas. Leia.

O que é manipulação de string em Bash

A manipulação da string é uma operação em uma string alterando seu conteúdo. Em Bash, a manipulação de string vem de duas formas: manipulação de cordas de bash pura e manipulação de string através de comandos externos. Aqui vamos tocar nos dois tipos de manipulação de cordas.

Suponha que tenhamos uma variável em Bash segurando uma corda que desejamos manipular a string nomeada. No caso de que mais de uma sequência existe, nomeamos a string strings, string2,… Além disso, podemos optar por nomear uma string algo mais significativo do que string para promover a compreensão do conteúdo da string e o uso pretendido.

Strings concatenados - listando strings em uma string

Em Bash, a maneira mais fácil de concatenar strings é listar strings em ordem. A string resultante é uma nova string que contém todas as seqüências listadas.

$ string1 $ string2…

Exemplo: String concatenação listando strings em string


String = "One";
string2 = "dois";
String3 = $ String $ String2;
echo $ string3

Saída

um dois

Listando seqüências de strings em uma matriz

Em Bash, outra maneira de concatenar strings é listar strings em uma matriz e usar a expansão dos parâmetros para expandir a matriz na sequência concatenada. No entanto, diferentemente do exemplo acima, a remoção de elementos de matriz de espaço em branco pode exigir trabalho extra.

Array ($ strings $ strings2…)

Exemplo: Concatenação da String listando strings em uma matriz


strings = ("um" "dois");
eco $ strings [@]

Saída

um dois

Encurte uma string - mude uma string para a esquerda

Uma maneira de encurtar uma corda é mudar seu conteúdo para a esquerda. O conteúdo da string mudou para a esquerda desaparecendo, resultando em uma corda mais curta.

Exemplo: Shift Left Loop


string = "abcdefghijklmnopqrstuvwxyz";
para i em $ (seq 0 $ (($ #string - 1)));
fazer
echo $ string: $ i;
feito

Saída

a B C D e F G H I J K L M N o p q R S T U V W x y Z
bcdefghijklmnopqrstuvwxyz
CDEFGHIJKLMNOPQRSTUVWXYZ
Defghijklmnopqrstuvwxyz
efghijklmnopqrstStuvwxyz
fghijklmnopqrstuvwxyz
ghijklmnopqrstuvwxyz
Hijklmnopqrstuvwxyz
ijklmnopqrstuvwxyz
Jklmnopqrstuvwxyz
Klmnopqrstuvwxyz
LMNOPQRSTUVWXYZ
mnopqrstuvwxyz
Nopqrstuvwxyz
OPQRSTUVWXYZ
pqrstuvwxyz
qrstuvwxyz
rstuvwxyz
STUVWXYZ
tuvwxyz
uvwxyz
V W x y Z
W x y Z
XYZ
yz
z

Mude uma string para a direita, obtenha substring de string

Outra maneira de encurtar uma string em Bash é obter a substring de uma string. A operação resultante pode ser usada para implementar uma operação de mudança à direita semelhante ao método acima.

Exemplo: Shift Right Loop


string = "abcdefghijklmnopqrstuvwxyz";
para i em $ (seq 0 $ (($ #string - 1)));
fazer
echo $ string: 0: $ #string -i;
feito

Saída

a B C D e F G H I J K L M N o p q R S T U V W x y Z
abcdefghijklmnopqrstuvwxy
abcdefghijklmnopqrstuvwx
abcdefghijklmnopqrstuvw
abcdefghijklMnopqrstuv
abcdefghijklmnopqrstu
abcdefghijklmnopqrst
abcdefghijklmnopqrs
abcdefghijklmnopqr
abcdefghijklmnopq
abcdefghijklmnop
abcdefghijklmno
abcdefghijklmn
abcdefghijklm
abcdefghijkl
abcdefghijk
abcdefghij
abcdefghi
abcdefgh
ABCDEFG
ABCDEF
ABCDE
ABCD
abc
ab
a

Exemplo: Shift Loop Pyramid

Por diversão, vamos combinar os dois exemplos de loop de turno acima para desenhar uma etapa em nosso terminal.

Exemplo: Etapa do loop de mudança


string = "abcdefghijklmnopqrstuvwxyz";

para i em $ (seq 0 $ (($ #string - 1)));
fazer
echo $ string: 0: $ #string -i;
feito
| tac;

para i em $ (seq 0 $ (($ #string - 1)));
fazer
echo $ string: $ i;
feito

Saída

a
ab
abc
ABCD
ABCDE
ABCDEF
ABCDEFG
abcdefgh
abcdefghi
abcdefghij
abcdefghijk
abcdefghijkl
abcdefghijklm
abcdefghijklmn
abcdefghijklmno
abcdefghijklmnop
abcdefghijklmnopq
abcdefghijklmnopqr
abcdefghijklmnopqrs
abcdefghijklmnopqrst
abcdefghijklmnopqrstu
abcdefghijklMnopqrstuv
abcdefghijklmnopqrstuvw
abcdefghijklmnopqrstuvwx
abcdefghijklmnopqrstuvwxy
a B C D e F G H I J K L M N o p q R S T U V W x y Z
a B C D e F G H I J K L M N o p q R S T U V W x y Z
bcdefghijklmnopqrstuvwxyz
CDEFGHIJKLMNOPQRSTUVWXYZ
Defghijklmnopqrstuvwxyz
efghijklmnopqrstStuvwxyz
fghijklmnopqrstuvwxyz
ghijklmnopqrstuvwxyz
Hijklmnopqrstuvwxyz
ijklmnopqrstuvwxyz
Jklmnopqrstuvwxyz
Klmnopqrstuvwxyz
LMNOPQRSTUVWXYZ
mnopqrstuvwxyz
Nopqrstuvwxyz
OPQRSTUVWXYZ
pqrstuvwxyz
qrstuvwxyz
rstuvwxyz
STUVWXYZ
tuvwxyz
uvwxyz
V W x y Z
W x y Z
XYZ
yz
z

Capitalize toda a corda em bash

No Bash4 ou mais tarde, você pode capitalizar os caracteres imprimíveis usando a expansão dos parâmetros da seguinte maneira.

$ string ^^

Suponha que jogemos as 10 primeiras palavras da saída do exemplo de etapa do loop de mudança em uma variável chamada pirâmide. Observe que não modificado, o comportamento esperado de ecoar seu conteúdo é o seguinte.

Comando


pyramid = "a abc abcd abcde abcdef abcdefg abcdefgh abcdefghi abcdefghij"
eco $ pyramid

Saída

Um abc abcd abcde abcdef abcdefg abcdefgh abcdefghi abcdefghij

Observe que, como seria de esperar, não há bonés. Vamos explodir. Isto é, vamos fazer todos os seus personagens bonés.

Comando

eco $ pyramid ^^

Saída

Um abc abcd abcde abcdef abcdefg abcdefgh abcdefghi abcdefghij

Essa foi fácil! Que tal se queremos converter apenas a primeira letra em uma corda em tampas como uma frase? Sim, nós podemos! Tudo o que precisamos fazer é tentar um pouco menos, um personagem menos para ser exato.

Capitalize apenas a primeira letra em uma corda

Talvez capitalizar toda. E se você precisar apenas capitalizar a primeira letra como uma frase?

Comandos

pyramid = "a abc abcd abcde abcdef abcdefg abcdefgh abcdefghi abcdefghij"
eco $ pyramid^

Saída

Um abc abcd abcde abcdef abcdefg abcdefgh abcdefghi abcdefghij

Agora, suponha que estamos mais interessados ​​em converter strings em minúsculas. Felizmente, existe uma maneira pura de fazer isso; que é usar expansão de parâmetros.

Converter a corda inteira em minúsculas em bash

Converta uma string em todas as minúsculas em bash usando o operador de expansão de parâmetros duplos ("," ").

Comandos


pyramid = "um abc abcd abcde abcdef abcdefg abcdefgh abcdefghi abcdefghij";
echo $ pyramid;
eco $ pirâmide ,,

Saída

Um abc abcd abcde abcdef abcdefg abcdefgh abcdefghi abcdefghij
Um abc abcd abcde abcdef abcdefg abcdefgh abcdefghi abcdefghij

Converter apenas a primeira letra em uma corda em minúsculas

Converta o primeiro caractere em uma string minúsculas em Bash usando o operador de expansão de parâmetros de commão único (",").

Comandos


pyramid = "um abc abcd abcde abcdef abcdefg abcdefgh abcdefghi abcdefghij";
echo $ pyramid;
eco $ pyramid,

Saída

Um abc abcd abcde abcdef abcdefg abcdefgh abcdefghi abcdefghij
Um abc abcd abcde abcdef abcdefg abcdefgh abcdefghi abcdefghij

Atribuir uma string vazia um valor e retornar seu valor

Muitas vezes, você deseja definir um retorno para uma corda vazia e persistir seu valor em um script de bash, como o caso ao aceitar opcionalmente variáveis ​​do ambiente. Isso pode ser realizado usando a expansão dos parâmetros.

Comandos


echo [$ str];
echo [$ str: = vazio];
eco [$ str]

Saída

[]
[vazio]
[vazio]

Notas: STR é assumido como não atribuído

Substitua um padrão que ocorre em uma corda uma vez em bash

Temos uma corda sentada em uma variável e queremos substituir a primeira ocorrência de uma substring. Aqui está como.

Uso básico

$ str/padrão/substituição

Comandos


str = "01101100011010010110111001110101011111000011010000110100100101101110011101000010111
0011000110110111101101101 ";
echo $ str;
eco $ str/111/000

Saída

011011000110100101101110011101010111111000011010000110100101101110011101
0000101110011000110110111101101101
01101100011010010110000000000101000000100001101000011010010101010000000001
0000100000011000110110000101101101

Substitua todas as ocorrências de um padrão em uma corda em bash

Temos uma string em uma variável e queremos substituir todas as ocorrências de uma substring. Aqui está como.

Uso básico

$ str // Pattern/Substacement

Comandos


str = "011011000110100101101110011101010111110000110100001101001010111111001110
10000101110011000110110111101101101 ";
echo $ str;
echo $ str // 111/000

Saída

0110110001101001011011100111010101111100001101000011010010110111100
1110100001011100110001101101111101101101
01101100011010010110000000000101000000100001101000011010010101010000IRA
00010000100000011000110110000101101101

Como manipular strings em festas usando comandos externos

Para manipular as cordas em Bash usando um comando externo, precisamos usar um recurso que a substituição do comando manual de chamadas bash. Em suma, o que quer que esteja dentro de $ () ou "é tratado como um comando e substituído no lugar. Francamente, prefiro a primeira maneira; No entanto, você pode usar também. A maneira mais fácil de usar a substituição de comando é atribuir o resultado da substituição de comando a uma variável como segue.

Comandos

resultado = $ (comando)

No caso de manipulação de string usando um comando externo no bash, precisaríamos canalizar o eco de uma string para o comando, a menos que seja transmitido pela sequência para o comando como um parâmetro é aceito. Aqui está como deve ser o novo resultado.

Comandos

resultado = $ (echo "$ resultado" | comando)

Agora, vamos tentar fazer algo real. No entanto, reduza uma corda contendo palavras para a última palavra na string? Para este exemplo, vamos usar o comando externo Gawk.

Notas sobre os seguintes comandos. Vamos fazer tudo minúsculo e nos livrar dos períodos. A citação é de Linus Torvalds. É uma citação muito popular.

Comandos


quote = "Talk é barato. Mostre -me o código.";
last_word = $ (echo "$ citação //./ "| Gawk 'print $ (nf)');
eco "$ last_word ,,"

Saída

código

Bottom line na manipulação de strings em Bash

Aqui abordamos como manipular as cordas da maneira pura e também usar comandos externos. Para técnicas de manipulação de cordas Bash Pure Bash, um recurso chamado expansão de parâmetros foi usado. Por outro lado, para o caso de comandos externos, a substituição de comando foi usada. Com certeza, ao escrever esta peça, melhorei minha capacidade de manipular cordas em Bash. Felizmente, você também.

Observe que o tópico desta discussão não foi tratado na íntegra. No entanto, são deixados exercícios para aqueles que gostariam de mexer um pouco mais. Para outras manipulações de string não contidas neste artigo, você pode entrar em contato comigo diretamente ou entrar em contato com o editor.

Isso é manipulação de cordas suficientes, por enquanto ... obrigado,