recherche de texte inexacte


10

Existe-t-il un utilitaire comme grepou même uniqmais pour une recherche inexacte, ou devrais-je l'écrire moi-même?

Je veux dire qu'il se penchera sur 90% (le nombre peut varier) correspondant, ou quelque chose comme ça. Par exemple, j'ai un fichier avec plusieurs chaînes:

abc123
abd123
abc223
qwe938

Dans ce cas, cet utilitaire doit renvoyer les trois premières chaînes ou dire qu'elles sont similaires. Bien sûr, je ne connais aucun modèle de contenu de fichier comme dans le cas avec grepou uniq.


C'est très spécifique à l'ensemble de données. Par exemple, Marie est-elle comme Marie ou ABC est-elle comme BCD? Pouvez-vous donner un exemple réel de vos données?
EightBitTony

Réponses:


19

acceptp ou tre-grep fera ce que vous demandez; ils correspondent à des expressions rationnelles "approximatives" / grep. Pour plus d'informations, consultez également l'article Wikipedia .

% tre-agrep --help | head             (05-23 16:53)
Usage: tre-agrep [OPTION]... PATTERN [FILE]...
Searches for approximate matches of PATTERN in each FILE or standard input.
Example: `tre-agrep -2 optimize foo.txt' outputs all lines in file `foo.txt'     that
match "optimize" within two errors.  E.g. lines which contain "optimise",
"optmise", and "opitmize" all match.

Regexp selection and interpretation:
  -e, --regexp=PATTERN      use PATTERN as a regular expression
  -i, --ignore-case         ignore case distinctions
  -k, --literal             PATTERN is a literal string


% agrep  | head                       (05-23 16:53)
usage: agrep [-@#abcdehiklnoprstvwxyBDGIMSV] [-f patternfile] [-H dir] pattern [files]

summary of frequently used options:
(For a more detailed listing see 'man agrep'.)
-#: find matches with at most # errors
-c: output the number of matched records
-d: define record delimiter
-h: do not output file names
-i: case-insensitive search, e.g., 'a' = 'A'
-l: output the names of files that contain a match
-n: output record prefixed by record number
-v: output those records that have no matches
-w: pattern has to match as a word, e.g., 'win' will not match 'wind'
-B: best match mode. find the closest matches to the pattern
-G: output the files that contain a match
-H 'dir': the cast-dictionary is located in directory 'dir'

C'est exactement ce que je recherche. Je vous remercie.
rush
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.