búsqueda de texto inexacta

10

¿Hay alguna utilidad similar grepo incluso uniqpara búsqueda inexacta, o debería escribirla yo mismo?

Quiero decir que buscará una coincidencia del 90% (el número puede variar), o algo así. Por ejemplo, tengo un archivo con varias cadenas:

abc123
abd123
abc223
qwe938

En este caso, dicha utilidad debería devolver las tres primeras cadenas o decir que son similares. Por supuesto, no conozco ningún patrón del contenido del archivo, como en el caso de grepo uniq.

prisa
fuente
Este es un conjunto de datos muy específico. Por ejemplo, ¿Mary es como Marie o ABC como BCD? ¿Puedes dar un ejemplo del mundo real de tus datos?
EightBitTony

Respuestas:

19

agrep o tre-grep harán lo que le pidas; son "aproximadas" coincidencia de expresiones regulares / grep. Para más información, vea también el artículo de 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'
sombreador
fuente
Eso es exactamente lo que estoy buscando. Gracias.
prisa