我需要用新值替换脚本语言的实例Progress (n,m)
和Progress label="some text title" (n,m)
(N,M)
N= integer ((n/m) * normal)
M= integer ( normal )
进度语句可以在脚本行的任何位置(更糟糕的是,尽管不是当前脚本,但可以跨行拆分)。
该值normal
是 1 到 255 之间的指定数字,n
并且m
是浮点数
到目前为止,我的sed
实现如下。它仅适用于Progress (n,m)
格式而不适用于格式Progress label="Title" (n,m)
,但它只是简单的坚果:
#!/bin/bash
normal=$1;
file=$2
for n in $(sed -rn '/Progress/s/Progress[ \t]+\(([0-9\. \t]+),([0-9\. \t]+)\).+/\1/p' "$file" )
do
m=$(sed -rn "/Progress/s/Progress[ \t]+\(${n},([0-9\. \t]+).+/\1/p" "$file")
N=$(echo "($normal * $n)/$m" | bc)
M=$normal
sed -ri "/Progress/s/Progress[ \t]+\($n,$m\)/Progress ($N,$M)/" "$file"
done
简单地说:这行得通,但是,有没有更好的方法?
我的工具箱中有sed
和bash
脚本,而不是那么多perl
,awk
我认为这个问题更适合。
编辑样本输入。
Progress label="qt-xx-95" (0, 50) thermal label "qt-xx-95" ramp(slew=.75,sp=95,closed) Progress (20, 50) Pause 5 Progress (25, 50) Pause 5 Progress (30, 50) Pause 5 Progress (35, 50) Pause 5 Progress (40, 50) Pause 5 Progress (45, 50) Pause 5 Progress (50, 50)
Progress label="qt-95-70" (0, 40) thermal label "qt-95-70" hold(sp=70) Progress (10, 40) Pause 5 Progress (15, 40) Pause 5 Progress (20, 40) Pause 5 Progress (25, 40) Pause 5