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