Как мне изолировать текст в кавычках из файла в переменную оболочки?

StackOverflow https://stackoverflow.com/questions/6070856

Вопрос

Как мне изолировать текст в кавычках из файла в переменную оболочки?
Также:как мне игнорировать строки, начинающиеся с '#'?

Допустим, у меня есть текстовый файл

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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top