Bash - 替换引号之间的随机数

Bash - 替换引号之间的随机数

我创建了一个脚本,用于写入 .flame/XML 之类的文件,其中包含一个如下所示的字符串:

scale="n"

在哪里n是一个随机数,具有可变的位数。我试图做的是将这个字符串替换为特定范围内的另一个随机数;生成这个数字是微不足道的,因为我已经有了为此目的而努力。尝试查找并替换此字符串时会出现问题,因为它可能类似于以下任何字符串:

scale="54.1948", scale="182.55816", or scale="3.59"

我尝试过使用sed为此,虽然我相信这是可能的,但我还没有找到正确的语法。文件之间该字符串的出现不一致。

理想情况下,我正在寻找的命令会转换一个如下所示的字符串:

scale="54.1948" or scale="3.59"

一个看起来像这样的:

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"/

该表达式[^"]*匹配零个或多个非双引号字符。引用后,shell命令如下所示:

sed "s/scale=\"[^\"]*\"/scale=\"$n\"/"

如果您只想更改仅scale包含数字和小数点的值,您可以使用如下内容:

s/scale="[.0-9]*"/scale="'$n"/

通常需要在输入检查与可读性和可维护性之间进行权衡。

相关内容