gpt4 book ai didi

c - 使用 grep/sort 删除一行中的多个换行符

转载 作者:行者123 更新时间:2023-11-30 17:43:06 25 4
gpt4 key购买 nike

我制作了一个实现 printenv | 的 C 程序grep [参数] |排序|少,但由于某种原因,我在输出的开头收到了一堆换行符。可能是因为我如何将环境变量从父进程写入 grep 进程。如果我运行 myProgram PATH,我的结果是:

/*40 blank lines */
INFOPATH=/usr/share/info
MANPATH=/usr/local/vol/matlab/7.4.0/man:/usr/kerberos/man:/usr/local/share/man:/usr /share/man/en:/usr/share/man:/usr/man
MODULEPATH=/usr/local/vol/modulefiles:/pkg/modules/modulefiles:/etc/site/modulefiles: /usr/share/Modules/modulefiles:/etc/modulefiles
PATH=/usr/lib/heimdal/bin:/usr/local/vol/comsol/3.4/bin:/usr/local/vol/maple/10.05/bin:/usr/local/vol/matlab/7.4.0/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/opt/real/RealPlayer
WMMENUPATH=/usr/local/vol/maple/menudef/10.05:/usr/local/vol/fvwm2/menudefs/emacs:/usr/local/vol/fvwm2/menudefs/acroread

我正在使用 C 来通过管道调用和连接 shell 程序。每个程序(grep、sort、less/more)都在它自己的子进程中调用并通过管道传输到其他程序。父进程通过管道将环境变量写入 grep,如下所示:

for(i=0; envp[i]!=NULL; i++)
{
return_value = write(pipe_fd[0][PIPE_WRITE],envp[i], strlen(envp[i]));
errorCheck(return_value, "Cannot write to pipe in parent\n");
return_value=write(pipe_fd[0][PIPE_WRITE],"\n",1);
errorCheck(return_value, "Cannot write to pipe in parent\n");
}

我尝试在排序调用中添加一堆选项,但到目前为止没有任何效果。 我的问题是是否有办法使用 grep 或 sort 忽略连续的多个换行符?

最佳答案

从输出流中过滤掉空白行:

... | grep . | ...

或者,过滤掉仅包含空格的任何行:

... | grep '\S' | ...

关于c - 使用 grep/sort 删除一行中的多个换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20314862/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com