Exemplo de script de teste que funciona para mim:
#!/bin/sh
raw="1F3C6..1F3CA
1F3CF..1F3D3
1F3E0..1F3F0"
for r in $raw
do
f1='echo "${r}" | cut -d'.' -f1'
f2='echo "${r}" | cut -d'.' -f2'
f3='echo "${r}" | cut -d'.' -f3'
echo "field 1:[${f1}] field 2:[${f2}] field 3:[${f3}]"
done
exit
E a saída é:
field 1:[1F3C6] field 2:[] field 3:[1F3CA]
field 1:[1F3CF] field 2:[] field 3:[1F3D3]
field 1:[1F3E0] field 2:[] field 3:[1F3F0]
Editar
Depois de ler o comentário de Stéphane Chazelas e vincular a Q & A, eu reescrevi o acima para remover o loop
.
Eu não consegui descobrir uma maneira de remover o loop
e manter as partes como variáveis (por exemplo, $f1
, $f2
e $f3
na minha resposta original) que poderia ser passado ao redor. Ainda não sei o que foi exigido na pergunta original.
Primeiro, ainda usando cut
:
#!/bin/sh
raw="1F3C6..1F3CA
1F3CF..1F3D3
1F3E0..1F3F0"
printf '%s\n' "${raw}" | cut -d'.' -f1,3
Qual será a saída:
1F3C6.1F3CA
1F3CF.1F3D3
1F3E0.1F3F0
Poderia substituir o .
exibido por qualquer string usando o --output-delimiter=STRING
.
Em seguida, com sed
em vez de cut
para dar mais controle à saída:
#!/bin/sh
raw="1F3C6..1F3CA
1F3CF..1F3D3
1F3E0..1F3F0"
printf '%s\n' "${raw}" | sed 's/^\(.*\)\.\.\(.*\)$/field 1 [] field 2 []/'
E isso será processado:
field 1 [1F3C6] field 2 [1F3CA]
field 1 [1F3CF] field 2 [1F3D3]
field 1 [1F3E0] field 2 [1F3F0]