Como isolo o texto citado de um arquivo para uma variável shell?
-
07-09-2020 - |
Pergunta
Como isolo o texto citado de um arquivo para uma variável shell?
Também:como faço para ignorar linhas que começam com '#'
?
Digamos que eu tenha o arquivo de texto
8723 "full name" "more data here" #5002 "another name" "bla bla bla" 7129 "single" blablabla 3910 noquote "bla bla bla"
e quero escrever um script que execute
#!/bin/sh
myscript <KEY> "<FULL NAME>" "<MORE DATA>"
para cada linha no arquivo de texto.
Se ficar mais fácil, você pode assumir que FULLNAME e MOREDATA no arquivo de texto estão sempre entre aspas, mesmo quando são compostos por uma única palavra.
Eu tentei o simples
#!/bin/sh
while read key name extra
do
echo "myscript $key \"$name\" -- \"$extra\""
#myscript $key "$name" "$extra"
done < list.txt
mas não agrupa o valor entre aspas em uma única variável de shell.
A saída é
myscript 8723 ""full" -- "name" "more data here"" myscript #5002 ""another" -- "name" "bla bla bla"" myscript 7129 ""single"" -- "blablabla" myscript 3910 "noquote" -- ""bla bla bla""
Em vez disso, gostaria de obter
myscript 8723 "full name" -- "more data here" myscript 7129 "single" -- "blablabla" myscript 3910 "noquote" -- "bla bla bla"
Claro que posso adicionar myscript
para cada linha do arquivo de texto original e transforme esse arquivo em um script ou escreva um C
programa para fazer isso...
Solução
#!/bin/sh
while read key name extra
do
eval myscript $key $name $extra
done <(grep -v "^#" list.txt)
Outras dicas
sed -e '/^[^#]/s/^/myscript /' list.txt
EDITAR:Para executá-lo:
sed -e '/^[^#]/s/^/myscript /' list.txt | bash
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow