我在C中有一个shell脚本,定义为
#define SHELLSCRIPT "\
sed 's/./& \
inserted text \
/20' fileA.txt > fileB.txt \
"
当在终端上运行此shell脚本时,它会在偏移量为20的fileB.txt中插入文本inserted text
。现在,我想要20
fileA.txt
和fileB.txt
从变量中提取。
我该怎么做?我尝试了以下
#define SHELLSCRIPT "\
sed 's/./& \
inserted text \
/$i' fileA.txt > fileB.txt \
"
在我运行上面的shell脚本之前的C中,我运行了system("i=20");
但是我在下面遇到了这个错误
sed: 1: "s/./& this comment has ...": bad flag in substitute command: '$'
我怎样才能做到这一点?
答案 0 :(得分:2)
当你运行system()
时,它每次都会启动一个新的shell。因此i=20
运行的shell与运行sed
命令的shell不同。
而不是脚本文本中的$i
,而是将%d
放在那里。然后,您可以将其用作sprintf的格式字符串,它可以将命令格式化为单独的变量。
#define SHELLSCRIPT "\
sed 's/./& \
inserted text \
/%d' fileA.txt > fileB.txt \
"
char command[500];
sprintf(command, SHELLSCRIPT, 20);
system(command);
答案 1 :(得分:1)
如何更换脚本命令
#define SHELLSCRIPT "\
sed 's/./& \
inserted text \
/%d' %s > %s \
"
然后在执行命令之前用变量替换:
char cmd[100 +1];
sprintf(cmd, SHELLSCRIPT , 20, "file1", "file2");
system(cmd)