Problema com sed em um array contendo strings contendo espaços

1

Eu tenho uma matriz parecida com esta:

array=("(1 2 3) (123)" "2 31 (231)" "4 5 1 (451)" "(te)xt (1234)")

Este array é um exemplo. Não se parece com isso, mas sua estrutura é a mesma (as seqüências de caracteres têm a mesma estrutura) . Se eu quiser usar as strings únicas em um loop select , posso fazer assim:

select string in "${array[@]}"
do
   # do something
done

Mas a string entre parênteses não é para exibição. Então usei sed para removê-los:

echo "${array[@]}" | sed -r 's/ \([0-9]+\)$//g'

Isso não funcionou. Somente os últimos parênteses foram removidos e as seqüências foram mescladas. Mas como posso alcançar o resultado desejado que seria o mesmo que o seguinte exemplo:

array2=("(1 2 3)" "2 31" "4 5 1" "(te)xt")

select string in "${array2[@]}"
do
   # do something
done
    
por BrainStone 22.12.2013 / 17:50

1 resposta

4

As matrizes não têm significado para sed . Depois que sua matriz bash for passada por sed , ela se tornará texto simples.

Use bash para remover os parênteses (supondo que a parte a ser removida esteja sempre no final das strings):

array2=("${array[@]%(*}")

(Em você bash manual verifique a seção sobre expansão de parâmetro para mais.)

    
por 22.12.2013 / 17:57