微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

bash上的grep regex / globbing行为

如何解决bash上的grep regex / globbing行为

我想知道+ *在这里如何解释以产生此输出。 AFAIK grep应该在此处使用BRE regex,如果发生这种情况,可能会导致量化目标出现无效的目标。

如果*变得模糊不清,则+如何适应此处的图片。 B,cos,如果我删除+,则无法使用。

ec2-user@ip-10-181-1-124:~> ls -lrt | grep -i libncurses+*
-rw-r--r-- 1 ec2-user users          0 Oct 14 20:09 libncurses5-6.1-lp152.7.67.x86_64
-rw-r--r-- 1 ec2-user users          0 Oct 14 20:10 libncurses55-6.1-lp152.7.67.x86_64
-rw-r--r-- 1 ec2-user users          0 Oct 14 20:10 libncurses6-6.1-lp152.7.67.x86_64
-rw-r--r-- 1 ec2-user users          0 Oct 14 20:10 libncurses66-6.1-lp152.7.67.x86_64

更多测试命令

ec2-user@ip-10-181-1-124:~> ls -lrt | grep -i libncurses
-rw-r--r-- 1 ec2-user users          0 Oct 14 20:09 libncurses5-6.1-lp152.7.67.x86_64
-rw-r--r-- 1 ec2-user users          0 Oct 14 20:10 libncurses55-6.1-lp152.7.67.x86_64
-rw-r--r-- 1 ec2-user users          0 Oct 14 20:10 libncurses6-6.1-lp152.7.67.x86_64
-rw-r--r-- 1 ec2-user users          0 Oct 14 20:10 libncurses66-6.1-lp152.7.67.x86_64
ec2-user@ip-10-181-1-124:~> ls -lrt | grep -i libncurses+*
-rw-r--r-- 1 ec2-user users          0 Oct 14 20:09 libncurses5-6.1-lp152.7.67.x86_64
-rw-r--r-- 1 ec2-user users          0 Oct 14 20:10 libncurses55-6.1-lp152.7.67.x86_64
-rw-r--r-- 1 ec2-user users          0 Oct 14 20:10 libncurses6-6.1-lp152.7.67.x86_64
-rw-r--r-- 1 ec2-user users          0 Oct 14 20:10 libncurses66-6.1-lp152.7.67.x86_64
ec2-user@ip-10-181-1-124:~> ls -lrt | grep -i libncurses+
ec2-user@ip-10-181-1-124:~> ls -lrt | grep -i libncurses*

解决方法

MPI_Request reqs_0[size_req],reqs_1[size_req],reqs_2[size_req],reqs_3[size_req],reqs_4[size_req],reqs_5[size_req],reqs_6[size_req],reqs_7[size_req]; MPI_Status status_0[size_req],status_1[size_req],status_2[size_req],status_3[size_req],status_4[size_req],status_5[size_req],status_6[size_req],status_7[size_req]; num_cpu = omp_get_max_threads(); MPI_Reduce(&num_cpu,&result,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD); if(rank==0){ num_cpu_0 = num_cpu; if(com==1){ num_cpu_others = 0; }else{ num_cpu_others = (result-num_cpu_0)/(com-1); } }else if(rank!=0){ num_cpu_0 = result - (com-1) * num_cpu; num_cpu_others = (result-num_cpu_0)/(com-1); } if(rank==0){ if(com==1){ num_orgs = NEAT::pop_size; }else{ num_orgs = (int) num_cpu_others / num_cpu * NEAT::pop_size; } } //SPREAD THE POPULATION ACROSS NODES if(rank==0){ for(int r=1; r < com; r++){ MPI_Isend(&num_orgs,r,parallel_0,&reqs_0[r]); MPI_Wait(&reqs_0[r],&status_0[r]); for(int org = 0; org < NEAT::pop_size; org++){ //send some genome information genome_info g_info; g_info.generation = pop->organisms[org]->generation; MPI_Isend(&g_info,mpi_genome_info,org,parallel_1,&reqs_1[org]); MPI_Wait(&reqs_1[org],&status_1[org]); //define the genome NEAT::Genome* sent_genome = pop->organisms[org]->gnome; //third the genes std::vector<NEAT::Gene*> gen_genes = sent_genome->genes; int num_genes = gen_genes.size(); struct genes sent_genes[num_genes]; for(int id = 0; id < num_genes; id++){ if(gen_genes[id]->lnk->linktrait==0){ sent_genes[id].trait_id = 0; }else{ sent_genes[id].trait_id = gen_genes[id]->lnk->linktrait->trait_id; } sent_genes[id].in_node_id = gen_genes[id]->lnk->in_node->node_id; sent_genes[id].out_node_id = gen_genes[id]->lnk->out_node->node_id; sent_genes[id].weight = gen_genes[id]->lnk->weight; sent_genes[id].recurrent = gen_genes[id]->lnk->is_recurrent; sent_genes[id].innovation_num = gen_genes[id]->innovation_num; sent_genes[id].mutation_num = gen_genes[id]->mutation_num; sent_genes[id].enable = gen_genes[id]->enable; if((org==3) && (id<3)){ std::cout << "input "<< sent_genes[id].in_node_id << " " << sent_genes[id].out_node_id <<" " << sent_genes[id].weight <<" " << sent_genes[id].recurrent <<" " << sent_genes[id].innovation_num <<" " << sent_genes[id].mutation_num <<" " << sent_genes[id].enable <<" " << std::endl; } } MPI_Isend(&num_genes,parallel_6,&reqs_6[org]); MPI_Wait(&reqs_6[org],&status_6[org]); MPI_Isend(&sent_genes,num_genes,mpi_gene,parallel_7,&reqs_7[org]); MPI_Wait(&reqs_7[org],&status_7[org]); } } } std::cout << "--------------" << std::endl; if(rank!=0){ std::vector<NEAT::Organism*> local_pop; int generation; MPI_Recv(&num_orgs,&status); std::cout << num_orgs << std::endl; for(int org = 0; org < num_orgs ; org++){ //receive genome information genome_info rcvd_genome_info; MPI_Recv(&rcvd_genome_info,&status); generation = rcvd_genome_info.generation; //receive genes int num_rcvd_genes; MPI_Recv(&num_rcvd_genes,&status); genes rcvd_genes[num_rcvd_genes]; MPI_Recv(&rcvd_genes,num_rcvd_genes,&status); //MPI_Waitall(size_req,&reqs_7[size_req],MPI_STATUSES_IGNORE); std::vector<NEAT::Gene*> gen_genes; for(int id = 0; id < num_rcvd_genes; id++){ genes p_gene = rcvd_genes[id]; if((org==3) && (id<3)){ std::cout << "output "<< p_gene.in_node_id << " " << p_gene.out_node_id <<" " << p_gene.weight <<" " << p_gene.recurrent <<" " << p_gene.innovation_num <<" " << p_gene.mutation_num <<" " << p_gene.enable <<" " << std::endl; } } } //MPI_Waitall(size_req,MPI_STATUSES_IGNORE);*/ } MPI_Finalize(); return 0; } 在全局模式中没有特殊含义。由于+与任何文件都不匹配,因此将其保留为未展开状态。因此libncurses+*等同于grep -i libncurses+*

在基本正则表达式中,grep -i 'libncurses+*'也没有特殊含义(在扩展正则表达式中,它表示先前模式中的1个或多个)。因此+与零个或多个+*字符的序列匹配。由于文件名都不包含任何+字符,因此正则表达式的这一部分无关紧要。您正在匹配包含+的所有文件名。

libncurses

不返回任何内容,因为它与ls -lrt | grep -i libncurses+ 字符明确匹配,并且文件名都没有该字符。

+

正在将通配符扩展到以ls -lrt | grep -i libncurses* 开头的所有文件名。所以这等同于

libncurses

这使用ls -lrt | grep -i libncurses5-6.1-lp152.7.67.x86_64 libncurses55-6.1-lp152.7.67.x86_64 libncurses6-6.1-lp152.7.67.x86_64 libncurses66-6.1-lp152.7.67.x86_64 作为匹配的正则表达式,并在文件libncurses5-6.1-lp152.7.67.x86_64libncurses55-6.1-lp152.7.67.x86_64libncurses6-6.1-lp152.7.67.x86_64中进行搜索。当libncurses66-6.1-lp152.7.67.x86_64获取文件名参数时,将忽略管道输入。

由于这些文件均不包含与regexp匹配的任何行,因此不会打印任何内容。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。