使用 grep 打印整数文字的问题

Problems using grep to print integer literals

我正在尝试使用正则表达式来匹配和打印出具有整数文字的行,但我似乎无法让它工作。我已经使用正则表达式教程进行了部分匹配,并提出了

(-|=)?([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);
}

您需要像下面这样更改您的 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]+'