我的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
答案 0 :(得分:1)
您在每个文件中执行3次sed
次运行。想象一下以下
sed -i s/check0/check150/g test/check51.mm
sed -i s/check1/check151/g test/check51.mm
sed -i s/check2/check152/g test/check51.mm
在
s/check0/check150/g
将check0
更改为check150
- 确定s/check1/check151/g
会将之前的check150
更改为check15150
(因为它也会在check1
中找到check150
字符串,从上一步开始。< / LI>
您需要更准确地定义正则表达式。因为这里没有任何示例输入,所以无法提供更多帮助。