ある文字が別の文字の前に表示される場合は、その文字のすべてのインスタンスを置き換えます。

ある文字が別の文字の前に表示される場合は、その文字のすべてのインスタンスを置き換えます。

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}'

おすすめ記事