Как мне изолировать текст в кавычках из файла в переменную оболочки?
-
07-09-2020 - |
Вопрос
Как мне изолировать текст в кавычках из файла в переменную оболочки?
Также:как мне игнорировать строки, начинающиеся с '#'
?
Допустим, у меня есть текстовый файл
8723 "full name" "more data here" #5002 "another name" "bla bla bla" 7129 "single" blablabla 3910 noquote "bla bla bla"
и я хочу написать скрипт, который выполняет
#!/bin/sh
myscript <KEY> "<FULL NAME>" "<MORE DATA>"
для каждой строки в текстовом файле.
Если вам так будет проще, вы можете предположить, что FULLNAME и MOREDATA в текстовом файле всегда заключены в кавычки, даже если они состоят из одного слова.
Я попробовал простой способ
#!/bin/sh
while read key name extra
do
echo "myscript $key \"$name\" -- \"$extra\""
#myscript $key "$name" "$extra"
done < list.txt
но это не группирует значение внутри кавычек в одной переменной оболочки.
На выходе получается
myscript 8723 ""full" -- "name" "more data here"" myscript #5002 ""another" -- "name" "bla bla bla"" myscript 7129 ""single"" -- "blablabla" myscript 3910 "noquote" -- ""bla bla bla""
Вместо этого я хотел бы получить
myscript 8723 "full name" -- "more data here" myscript 7129 "single" -- "blablabla" myscript 3910 "noquote" -- "bla bla bla"
Конечно, я могу добавить myscript
к каждой строке исходного текстового файла и преобразуйте этот файл в сценарий или напишите C
программа для этого ...
Решение
#!/bin/sh
while read key name extra
do
eval myscript $key $name $extra
done <(grep -v "^#" list.txt)
Другие советы
sed -e '/^[^#]/s/^/myscript /' list.txt
РЕДАКТИРОВАТЬ:Чтобы запустить его:
sed -e '/^[^#]/s/^/myscript /' list.txt | bash