Como obter o char em uma determinada posição de uma string no shell script?

14

Como obter o char em uma determinada posição de uma string no shell script?

    
por Tom Brito 17.03.2011 / 15:56

4 respostas

28

No bash com "Expansão de Parâmetro" $ {parameter: offset: length}

$ var=abcdef
$ echo ${var:0:1}
a
$ echo ${var:3:1}
d

Editar: sem expansão de parâmetro (não é muito elegante, mas foi o que veio primeiro para mim)

$ charpos() { pos=$1;shift; echo "$@"|sed 's/^.\{'$pos'\}\(.\).*$//';}
$ charpos 8 what ever here
r
    
por 17.03.2011 / 16:18
6

A alternativa para a expansão de parâmetros é expr substr

substr STRING POS LENGTH
    substring of STRING, POS counted from 1

Por exemplo:

$ expr substr hello 2 1
e
    
por 17.03.2011 / 19:08
1

cut -c

myvar='abc'
printf '%s' "$myvar" | cut -c2

saídas de b .

awk substr é outra alternativa POSIX, mas menos eficiente:

printf '%s' "$myvar" | awk '{print substr ($0, 2, 1)}'

printf '%s' é para evitar problemas com caracteres de escape: link , por exemplo:

myvar='\n'
printf '%s' "$myvar" | cut -c1

processa \ conforme o esperado.

Veja também: link

    
por 07.08.2018 / 08:40
0

Você pode usar o comando cut. Para obter a terceira posição:

echo "SAMPLETEXT" | cut -c3

Verifique este link link

( Casos avançados ) No entanto, modificar o IFS também é bom, especialmente quando sua entrada pode ter espaços. Só nesse caso, use o abaixo

saveifs=$IFS
IFS=$(echo -en "\n\b")
echo "SAMPLETEXT" | cut -c3
IFS=$saveifs
    
por 17.05.2018 / 19:20