niedokładne wyszukiwanie tekstu

10

Czy jest jakieś narzędzie, jak grepchoćby uniqniedokładne wyszukiwanie, czy też powinienem je napisać?

Mam na myśli, że będzie wyglądało na dopasowanie 90% (liczba może się różnić) lub coś w tym rodzaju. Na przykład mam plik z kilkoma ciągami:

abc123
abd123
abc223
qwe938

W takim przypadku takie narzędzie powinno zwrócić pierwsze trzy ciągi lub powiedzieć, że są podobne. Oczywiście nie znam żadnego wzorca zawartości pliku, jak w przypadku greplub uniq.

wysypka
źródło
Jest to bardzo specyficzne dla zestawu danych. Na przykład, czy Mary jest jak Marie, czy ABC jest jak BCD? Czy możesz podać prawdziwy przykład swoich danych?
EightBitTony

Odpowiedzi:

19

agrep lub tre-grep zrobi to, o co prosisz; są to „przybliżone” dopasowanie wyrażenia regularnego / grep. Aby uzyskać więcej informacji, zobacz także artykuł w Wikipedii .

% 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'
laebshade
źródło
Właśnie tego szukam. Dziękuję Ci.
pędzi