如何解决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_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
获取文件名参数时,将忽略管道输入。
由于这些文件均不包含与regexp匹配的任何行,因此不会打印任何内容。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。