如何将引用文本从文件中隔离到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
程序来执行此操作... < / p>
答案 0 :(得分:1)
sed -e '/^[^#]/s/^/myscript /' list.txt
编辑:运行它:
sed -e '/^[^#]/s/^/myscript /' list.txt | bash
答案 1 :(得分:1)
#!/bin/sh
while read key name extra
do
eval myscript $key $name $extra
done <(grep -v "^#" list.txt)