Obtendo diferentes partes de uma linha

0

Suponha que eu tenha uma linha de texto da seguinte forma:

I have a nice car

Existe alguma maneira de obter palavras diferentes da linha em diferentes posições individualmente (digamos, eu quero ter partes 'have' e 'nice') sem salvar a linha em nenhum arquivo. Quer dizer, eu quero aplicar um método que me dê diretamente as palavras nas posições desejadas da linha dada. Existe alguma maneira?

    
por Black 14.09.2015 / 22:33

4 respostas

5

bash tem matrizes:

line="I have * nice car"
set -f                      # disable pathname expansion
words=($line)               # no quotes around $line
set +f                      # re-enable pathname expansion

words é uma matriz de índice, baseada em zero, então

# print the 2nd word
echo "${words[1]}"               # ==> have

# print the 2nd-last word
echo "${words[-2]}"              # ==> nice

A conversão da string para um array divide a string em qualquer sequência de caracteres contida na variável $IFS do shell (padrão: space, tab, newline)

    
por 14.09.2015 / 22:38
4

Use awk tente isto:

$ awk '{print $2, $4}' file

Onde $x é a posição da palavra, isso é delimitado por espaços em branco

por exemplo,

$ echo "I have a nice car" | awk '{print $2, $4}'
have nice
    
por 14.09.2015 / 22:38
3
line="I have a nice car"
fields=$(echo "$line" | awk '{ print $2 " " $4 }')

Isso se divide por espaço em branco. Se você quiser posições de caractere, use cut .

    
por 14.09.2015 / 22:38
1

a opção cut

echo I have a nice car | cut -d\  -f2,4
have nice

onde

  • -d' ' tell cut para usar espaço em branco em vez de tabulação
  • -f2,4 obtém o 2º e o 4º campo
por 15.09.2015 / 11:24