如何将引用文本从文件中隔离到shell变量?

时间:2011-05-20 10:53:38

标签: shell parameters redirect quoting

如何将引用文本从文件中隔离到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>

2 个答案:

答案 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)