【发布时间】:2017-09-25 12:07:10
【问题描述】:
我在使用 sed 命令时遇到了一个奇怪的问题。
我有一个脚本,它获取一个 c 文件,将其复制 X 次,然后通过在名称中添加数字来替换其中的函数名称。
例如:
originalFile.c contains these functions check0, check1 check2
脚本将生成这些文件:
originalFile1.c: check0 check1 check2
originalFile2.c: check3 check4 check5
originalFile3.c: check6 check7 check8
... and so on.
现在的问题...如果我生成了足够多的文件,所以数量增加到 10,20 或更多,我注意到函数名称中有一些东西。该文件的第一个功能被错误地重命名,但另一个是正确的。例如:
originalFileX.c: __check165__ check16 check17
...
originalFileZ.c: __check297__ __check298__ check29 -> in this file 2 names are incorrects.
另外,如果我用 echo 打印名称,一切都是正确的。您知道可能出了什么问题吗?
这是我的脚本(我在 OSX 下运行):
#!/bin/bash
NUMCHECK=3
# $1: filename
# $2: number of function in the file
# $3: number of function I want to generate
# $4: function basename
function replace_name() {
FILE_NUM=$((($3+($2-1))/$2))
TMP=0
for (( i=1; i<$FILE_NUM+1; i++ ))
do
cp $1.mm test/$1$i.mm
for (( j=0; j<$2; j++ ))
do
OLDNAME="$4$j"
NEWNAME="$4$TMP"
echo $OLDNAME:$NEWNAME
sed -i "" "s/$OLDNAME/$NEWNAME/g" test/$1$i.mm
TMP=$(($TMP+1))
done
done
}
replace_name check $NUMCHECK 60 check
【问题讨论】:
标签: string bash macos shell sed