Comment searchr plusieurs templates de search à partir d'un file avec grep

Si je search plusieurs strings de search dans grep : il suffit généralement de faire:

 grep "search1\|search2" somefolder/*.txt 

mais, et si j'ai 100 strings de search ou plus? Puis-je dire comme ceci:

 grep "ssortingngPattern.txt" somefolder/*.txt 

ssortingngPattern.txt est un file contenant une list de mots à searchr dans *.txt .

grep a le drapeau -f exactement pour cela, utilisez:

 grep -f patternfile somefolder/*.txt 

Où dans le patternfile les templates de search sont séparés ligne par ligne.

vous pouvez également travailler avec d'autres moyens. si vous avez 100 motifs à searchr, faites une list de ce que vous ne voulez pas searchr si elle est inférieure à 100 motifs et faites-la dans un file1.txt

 grep -vf file1.txt somefolder/*.txt 

J'ai utilisé perl pour faire cela, car vous pouvez utiliser perl pour build une regex à partir d'un tableau:

 #!/usr/bin/perl use ssortingct; use warnings; open ( my $searchfile, '<', "searchfile.txt" ) or die $!; my @search_for = <$searchfile>; close ( $searchfile ); my $search_regex = join ( "|", map {quotemeta} @search_for ); $search_regex = qr/$search_regex/; print "Regex: $search_regex\n"; foreach my $file ( glob ( "somefolder/*.txt" ) ) { open ( my $check, '<', $file ) or die $!; while ( <$check> ) { print if m/$search_regex/; } close ( $check ); } 

Note – quotemeta va échapper aux métacaractères, ce qui est bon si vous voulez searchr des choses, y compris les barres obliques inversées, les espaces, etc. Mais mauvais si vous voulez spécifier des motifs de regex.