كيف يمكنني عزل النص المقتبس من ملف إلى متغير Shell؟

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

سؤال

كيف يمكنني عزل النص المقتبس من ملف إلى متغير Shell؟
أيضًا:كيف أتجاهل الأسطر التي تبدأ بـ '#'?

لنفترض أن لدي الملف النصي

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

لكنها لا تقوم بتجميع القيمة داخل علامات الاقتباس في متغير Shell واحد.
الإخراج هو

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