引用符付きのテキストをファイルからシェル変数に分散させる方法
-
07-09-2020 - |
質問
引用符付きのテキストをファイルからシェル変数に分散させる方法は?
も、'#'
で始まる行を無視しますか?
テキストファイルを持っていると言ってみましょう
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>"
.
テキストファイル内の各行に。
それが簡単になると、単一の単語で構成されている場合でも、テキストファイル内のフルネームとMoredataが常に引用符で囲まれていると仮定することができます。
私は簡単な
を試しました#!/bin/sh
while read key name extra
do
echo "myscript $key \"$name\" -- \"$extra\""
#myscript $key "$name" "$extra"
done < list.txt
.
しかし、それは単一のシェル変数の引用符内の値をグループ化しません。
出力は
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