次の文字列を含む .flame/XML ファイルに書き込むスクリプトを作成しました。
scale="n"
どこN桁数が可変の乱数です。私がやろうとしているのは、この文字列を特定の範囲内の他のランダムな数に置き換えることです。すでに持っているので、この数字を生成するのは簡単ではありません。シェンこれに努めてください。この文字列は次のいずれかの文字列に似ている可能性があるため、検索して置き換えようとすると問題が発生します。
scale="54.1948", scale="182.55816", or scale="3.59"
使ってみました。sedこれには可能だと思いますが、まだ正しい構文を見つけることができませんでした。この文字列の発生はファイル間で一貫していません。
理想的には、私が探しているコマンドは次のような文字列を変換します。
scale="54.1948" or scale="3.59"
1つは次のとおりです。
scale"254" or scale="579"
助けてくれてありがとう。
答え1
探している構文はですsed -e 's/\(scale=\)"[0-9]\+\(\.[0-9]\+\)\?"/\1"'"$replacement_number"'"/'
。正規表現の詳細を検索してください。
\(scale=\) the literal string scale=, remembered as \1
" opening double quote
[0-9]\+ one or more digits
\(\.[0-9]\+\)\? optionally, a period followed by one or more digits
" closing double quote
答え2
これはよりシンプルで一般的な解決策です。このソリューションは、拡張されたsed構文(-e
)と逆参照を使用しません。
これにより、二重引用符の間のすべての内容が数字に置き換えられます$n
。
デフォルトsed
のコマンドは次のとおりです。
s/scale="[^"]*"/scale="$n"/
この式は[^"]*
二重引用符ではなく、0文字以上の文字と一致します。引用後のshell
コマンドは次のとおりです。
sed "s/scale=\"[^\"]*\"/scale=\"$n\"/"
scale
数値と小数点のみを含む値を変更するには、次のように使用できます。
s/scale="[.0-9]*"/scale="'$n"/
入力確認と読みやすさとメンテナンスの間には、トレードオフがしばしばあります。