我创建了一个脚本,用于写入 .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"/
通常需要在输入检查与可读性和可维护性之间进行权衡。