sed命令在shell终端下工作正常,但在';系统();用C代码调用
我试图删除日志文件中的一些特殊行,所以在嵌入式linux系统上使用busybox的sedsed命令在shell终端下工作正常,但在';系统();用C代码调用,c,sed,C,Sed,我试图删除日志文件中的一些特殊行,所以在嵌入式linux系统上使用busybox的sed # sed BusyBox v1.18.4 (2013-01-16 16:00:18 CST) multi-call binary. Usage: sed [-efinr] SED_CMD [FILE]... Options: -e CMD Add CMD to sed commands to be executed -f FILE Add FILE contents
# sed
BusyBox v1.18.4 (2013-01-16 16:00:18 CST) multi-call binary.
Usage: sed [-efinr] SED_CMD [FILE]...
Options:
-e CMD Add CMD to sed commands to be executed
-f FILE Add FILE contents to sed commands to be executed
-i Edit files in-place (else sends result to stdout)
-n Suppress automatic printing of pattern space
-r Use extended regex syntax
If no -e or -f, the first non-option argument is the sed command string.
Remaining arguments are input files (stdin if none).
export MODULE=sshd
sed "/$MODULE\[/d" logfile
char logfile[] = "logfile";
char module_str[] = "sshd";
char env_str[64] = {0};
int offset = 0;
strcpy(env_str, "MODULE=");
offset += strlen("MODULE=");
strcpy(env_str + offset, module_str);
putenv(env_str);
system("sed \"/$MODULE\[/d\" logfile");
sed: unmatched '/'
我的“system()”调用有什么问题?我在文本处理方面完全是个新手,所以有人能给我一些线索吗?谢谢
致以最良好的祝愿,
dejunl我马上就能看到,[之前的\将被'C'吞没 所以你需要加倍努力 系统(“sed\”/$MODULE\\[/d\“日志文件”) 但是贝壳可能想吞下剩下的那一个吞下那一个再把它翻一番 系统(“sed\”/$MODULE\\\\[/d\“日志文件”)
当然是系统(“sed\”/$MODULE\\[/d\“日志文件”);无法确定我是否正在阅读您提出的问题。请使用echo而不是sed进行尝试,并调整它,直到字符串显示为您希望sed看到的字符串。是否需要使用
strcat
或+
而不是包含$MODULE?我想在sed命令中使用env变量,使用'strcat'可以解决此问题?为什么要包装您的C程序中的ed命令?小心使用putenv()
;它使用您在环境中提供的(本地)变量,这往往会导致问题。确保该变量具有足够长的生存期(static char env_str[64]=”;
)或改用setenv()
(setenv(“MODULE”,MODULE_str,1);
).1.对于Ed Morton来说,上面的代码只是我整个应用程序中用C编写的一个片段,我正在嵌入式系统上实现一个处理日志文件的模块。PS,谢谢你的好格式。哦,天哪,我的系统崩溃了,我现在无法启动,我稍后会尝试你的方法。谢谢你的回答。@JasenI在R(命令在终端工作,但在被system()
调用时不起作用),这为我解决了这个问题!!!谢谢!