我试图使用正则表达式匹配并打印出具有整数文字的行,但我似乎无法使其正常工作。我使用正则表达式教程完成了部分匹配,并提出了
( - | =)?([0-9])
我尝试将它放在grep中,但它不会为我的文件输出任何内容。我正在做
grep "(-|=)?([0-9])" my_fork.c
我还查看了之前的堆栈溢出问题(Printing out integer literals occurences on unix),并试图使用他的方法,但它也没有给我任何东西,所以我有点困惑。有人可以帮我搞这个正则表达式吗?
这是我的上下文文件
#include <stdio.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>
void processPrint(char * argv[], char * test, int i){
int j = 0;
for(; j < atoi(argv[1]); j++){
printf("PID: %d %c\n", getpid(), test[i]);
fflush(stdout);
}
exit(0);
}
void mainProcess(char * argv[], pid_t * childArray, int i, pid_t process){
int j = 0;
for(; j < atoi(argv[1]); j++){
printf("PID: %d A\n", getpid());
fflush(stdout);
}
childArray[i] = process;
}
void make_forks(pid_t process, char * argv[], pid_t * childArray, char * test){
int i = 0, main_ran = 0;
for(; i < 3; i++){
if ((process=fork()) == 0){
processPrint(argv, test, i);
}
else{
if(!main_ran){
mainProcess(argv, childArray, i, process);
}
main_ran = 1;
}
}
}
void wait_for_children(pid_t * childArray){
int incomplete = 0;
while(1){
int i = 0;
for(; i < 3; i++){
if(childArray[i] > 0 && waitpid(childArray[i], NULL, WNOHANG) != 0 ){
childArray[i] = 0;
}
else{ incomplete = 1; }
}
sleep(0);
if(!incomplete){ break; }
}
}
int main(int argc, char* argv[]){
pid_t * childArray= malloc(12), process;
char test[5] = "BCD";
make_forks(process, argv, childArray, test);
}
答案 0 :(得分:0)
您需要更改您的grep命令,如下所示。因为基本sed不支持可选的量词?
,并且捕获组由\(...\)
表示
$ echo '-5' | grep '\(-\|=\)*[0-9]'
-5
$ echo '=5' | grep '\([-=]\)*[0-9]'
=5
或强>
$ echo '-5' | grep -E '[-=]?[0-9]'
-5
$ echo '5' | grep -E '[-=]?[0-9]'
5
如果您想匹配一个或多个数字,请在+
旁边添加[0-9]
。
grep -E '[-=]?[0-9]+'