【发布时间】:2016-09-15 14:36:06
【问题描述】:
所以我正在测量 c 程序经过的总时间。通过这样做,我一直在运行这个 shell 脚本,它使用 sed 来替换在我的 c 程序中某行中间某处定义的常量(如下:N)的值。
#define N 10 // This constant will be incremented by shell program
在你告诉我应该使用一个变量并为使用它的函数计时之前,我必须在一次运行中从外部计时整个程序的执行时间(意味着不重新分配 N)。
我一直在 shell 脚本中使用以下内容来提供帮助:
tmp=$(sed "11s/[0-9][0-9]*/$INCREMENTINGVAR/" myprogram.c); printf "%s" "$tmp" > myprogram.c
用我的 INCREMENTINGVAR(替换)替换一个 3 位数字。但是,当替换长度为 2 位时,这对我来说似乎无法正常工作。 Sed 仅替换前两个字符并保留前一次运行的前 3 位而不删除它。
TESTS=0
while [ $TESTS -lt 3 ]
do
echo "This is test: $TESTS"
INCREMENTINGVAR=10
while [ "$INCREMENTINGVAR" -lt 10 ]
do
tmp=$(sed "11s/[0-9][0-9]*/$INCREMENTINGVAR/" myprogram.c); printf "%s" "$tmp" > myprogram.c
rm -f myprog.c.bak
echo "$INCREMENTINGVAR"
gcc myprogram.c -o myprogram.out; ./myprogram.out
INCREMENTINGVAR=$((INCREMENTINGVAR+5))
done
TESTS=$((TESTS+1))
done
有什么我应该做的吗?
编辑:添加了整个 shell 脚本;更改了 sed 的模式。
【问题讨论】:
-
您可以使用
-i选项将输出写回原始文件,因此您不需要该变量。 -
您的代码仅在有 3 位数字时替换。您的输入文件只有 2 位数字。所以它不应该取代任何东西。我不明白你说它留下了之前的第三位数字,因为没有第三位数字。
-
如果你有一个 4 位数字,它将替换前 3 个,但保留第 4 个。
标签: regex bash shell replace sed