BASHスクリプトで使用できるように、ファイルからいくつかの変数をエクスポートできる必要があります。ファイルの内容は次のとおりです。
my.variable.var1=a-long-ling.with.lot_of_different:characters:and_numbers
my.variable.another.var2=another-long-ling.with.lot_of_different:characters:and_numbers
my.variable.number3=yet_another_long-ling.with.lot_of_different:characters:and_numbers
source
最初はそのまま使用してみましたが、次のエラーが発生しましたcommand not found
。を試してみたexport
ところ、次のエラーメッセージが表示されましたnot a valid identifier
。
変数からmy.variable.var1
からmy_variable_var1
。
at行を切り取り=
、すべてのsをsに置き換えて変数を追加し直すだけ.
です_
。
だから私の質問は、次のように変更できるかどうかです。
my.variable.var1=a-long-ling.with.lot_of_different:characters:and_numbers
my.variable.another.var2=another-long-ling.with.lot_of_different:characters:and_numbers
my.variable.number3=yet_another_long-ling.with.lot_of_different:characters:and_numbers
到着
my_variable_var1=a-long-ling.with.lot_of_different:characters:and_numbers
my_variable_another_var2=another-long-ling.with.lot_of_different:characters:and_numbers
my_variable_number3=yet_another_long-ling.with.lot_of_different:characters:and_numbers
素敵な「シングルライナー」をお使いですか?それを使いたくて良い学習もしたいです。
ベストアンサー1
そしてsed
:
sed -e :1 -e 's/^\([^=]*\)\./\1_/;t1'
つまり、.
行の先頭を除く文字シーケンスを置き換え、その後に.
同じシーケンス sum を追加し、_
一致する項目がなくなるまでプロセスを繰り返します。
そしてawk
:
awk -F = -v OFS== '{gsub(/\./, "_", $1); print}'
右側に=
シェル関連の文字(\
「$&(); '#~<>...`、スペース、タブ、その他のスペース...)が含まれている場合は、引用符を付ける必要があります。
sed "s/'/'\\\\''/g;:1"'
s/^\([^=]*\)\./\1_/;t1'"
s/=/='/;s/\$/'/"
または:
awk -F = -v q="'" -v OFS== '
{gsub(q, q "\\" q q)
gsub(/\./, "_", $1)
$2 = q $2
print $0 q}'