كيف يمكنني عزل النص المقتبس من ملف إلى متغير Shell؟
-
07-09-2020 - |
سؤال
كيف يمكنني عزل النص المقتبس من ملف إلى متغير 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
لا تنتمي إلى StackOverflow