0

如何将文件中的引用文本隔离到 shell 变量?
另外:如何忽略以 开头的行'#'

假设我有文本文件

8723 "全名" "这里有更多数据"
#5002 “另一个名字” “bla bla bla”
7129“单”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" "这里有更多数据""
myscript #5002 ""another" -- "name" "bla bla bla""
myscript 7129 ""single"" -- "blablabla"
myscript 3910 "noquote" -- ""bla bla bla""

相反,我想获得

myscript 8723 "全名" -- "这里有更多数据"
myscript 7129“单”——“blablabla”
myscript 3910 "noquote" -- "bla bla bla"

当然,我可以添加myscript到原始文本文件的每一行,并使该文件成为脚本或编写C程序来执行此操作...

4

2 回答 2

1
sed -e '/^[^#]/s/^/myscript /' list.txt

编辑:运行它:

sed -e '/^[^#]/s/^/myscript /' list.txt | bash
于 2011-05-20T10:58:40.453 回答
1
#!/bin/sh
while read key name extra
do
    eval myscript $key $name $extra
done <(grep -v "^#" list.txt)
于 2011-05-20T11:51:13.687 回答