Encontre a posição final do espaço em branco em um script Bash

0

Estou escrevendo um script Bash e gostaria de encontrar a posição final do espaço em branco em várias strings. Eu não posso apenas procurar por espaços, porque pode ter abas nele. Abaixo estão alguns exemplos de linhas que eu poderia pesquisar.

11:tcp_listen         1.2.3.4:3478
12:tcp_listen              [::1]:3478
13:tcp_listen               [2600:2700:2800:2900:3000:3100:3200:3300]:3478
  • Primeira linha: Posição final do espaço em branco: 21
  • Segunda linha: posição final do espaço em branco: 26
  • Terceira linha: Posição final do espaço em branco: 24

Estou circulando por cada linha e tenho cada linha como uma variável.

Exemplo:

line="11:tcp_listen         1.2.3.4:3478"
    
por Daryl 19.09.2018 / 02:40

1 resposta

1

A tentativa de colar espaços e guias misturados falha nesta página da Web, mas:

$ line="11:tcp_listen         1.2.3.4:3478"
$ shopt -s extglob                                  # important!
$ prefix_with_spaces=${line%%+([^[:space:]])}
$ echo ">$prefix_with_spaces<"
>11:tcp_listen         <
$ echo ${#prefix_with_spaces}
22

Vamos tentar com guias reais

$ line=$'11:tcp_listen\t\t1.2.3.4:3478'
$ prefix_with_spaces=${line%%+([^[:space:]])}
$ echo ${#prefix_with_spaces}
15

Estou usando a expansão de parâmetros do shell e padrões estendidos. Verifique a página do manual para mais detalhes.

Da mesma forma, se você deseja obter o texto seguindo o último espaço: mesma técnica, padrão mais simples:

$ line="11:tcp_listen         1.2.3.4:3478"
$ suffix=${line##*[[:space:]]}
$ echo ">$suffix<"
>1.2.3.4:3478<
$ line=$'11:tcp_listen\t\t1.2.3.4:3478'
$ suffix=${line##*[[:space:]]}
$ echo ">$suffix<"
>1.2.3.4:3478<
    
por 19.09.2018 / 04:10

Tags