Удалить искусственно созданные слова из списка слов в Linux? - PullRequest
0 голосов
/ 10 июля 2020

Всем привет и доброго времени суток! У меня есть следующий вопрос: у меня есть список слов, который состоит из обычных и искусственно созданных слов.

пример:

Ford
09mKGmaePnCmjkxm
Opel
0AACyvG0FtRHAU7i
Audi
0AR6V7cCy2phgXcv
BMW
0bDOlBY5VGAe5Vai
Alfa-Romeo
Mercedes
Pegout-323
0BDTwSCCrCy4VgEc
0cmolI8g4CerXKaH
0dL2m36014PmOetH
0dqjCZU7ZeRuovFF
0ekelbAnWcGC1c7n
Lada 2109
Lada 2106
0ER4tS8jhESXuISp
0Gao8qHgbEyZ06Bh
0j1pjZBAW2avxU6Z
0j5zBVhdPDyaVoZL
Toyouta
0Jn0qoKdnM6neGdx
0KlzXttiw81AvU2C
0kXzuEtHxiWfECw7
mitsubisi
0l8qW9Uv0V1DZPei
0LJQxUNuEp42txme
jeep
0m8G1GUytcETbtWv
0MexVW3TQ2sRqLjr

Я хочу удалить все искусственно созданные слова из этого список. Я преобразовал такие слова в REGEX и сохранил их в новом файле «Generi c .txt»:

[0-9][0-9][a-z][A-Z][A-Z][a-z][a-z][a-z][A-Z][a-z][A-Z][a-z][a-z][a-z][a-z][a-z]
[0-9][A-Z][A-Z][A-Z][a-z][a-z][A-Z][0-9][A-Z][a-z][A-Z][A-Z][A-Z][A-Z][0-9][a-z]
[0-9][A-Z][A-Z][0-9][A-Z][0-9][a-z][A-Z][a-z][0-9][a-z][a-z][a-z][A-Z][a-z][a-z]
[0-9][a-z][A-Z][A-Z][a-z][A-Z][A-Z][0-9][A-Z][A-Z][A-Z][a-z][0-9][A-Z][a-z][a-z]
[0-9][A-Z][A-Z][A-Z][a-z][A-Z][A-Z][A-Z][a-z][A-Z][a-z][0-9][A-Z][a-z][A-Z][a-z]
[0-9][a-z][a-z][a-z][a-z][A-Z][0-9][a-z][0-9][A-Z][a-z][a-z][A-Z][A-Z][a-z][A-Z]
[0-9][a-z][A-Z][0-9][a-z][0-9][0-9][0-9][0-9][0-9][A-Z][a-z][A-Z][a-z][a-z][A-Z]
[0-9][a-z][a-z][a-z][A-Z][A-Z][A-Z][0-9][A-Z][a-z][A-Z][a-z][a-z][a-z][A-Z][A-Z]
[0-9][a-z][a-z][a-z][a-z][a-z][A-Z][a-z][A-Z][a-z][A-Z][A-Z][0-9][a-z][0-9][a-z]
[0-9][A-Z][A-Z][0-9][a-z][A-Z][0-9][a-z][a-z][A-Z][A-Z][A-Z][a-z][A-Z][A-Z][a-z]
[0-9][A-Z][a-z][a-z][0-9][a-z][A-Z][a-z][a-z][A-Z][a-z][A-Z][0-9][0-9][A-Z][a-z]
[0-9][a-z][0-9][a-z][a-z][A-Z][A-Z][A-Z][A-Z][0-9][a-z][a-z][a-z][A-Z][0-9][A-Z]
[0-9][a-z][0-9][a-z][A-Z][A-Z][a-z][a-z][A-Z][A-Z][a-z][a-z][A-Z][a-z][A-Z][A-Z]
[0-9][A-Z][a-z][0-9][a-z][a-z][A-Z][a-z][a-z][A-Z][0-9][a-z][a-z][A-Z][a-z][a-z]
[0-9][A-Z][a-z][a-z][A-Z][a-z][a-z][a-z][a-z][0-9][0-9][A-Z][a-z][A-Z][0-9][A-Z]
[0-9][a-z][A-Z][a-z][a-z][A-Z][a-z][A-Z][a-z][a-z][A-Z][a-z][A-Z][A-Z][a-z][0-9]
[0-9][a-z][0-9][a-z][A-Z][0-9][A-Z][a-z][0-9][A-Z][0-9][A-Z][A-Z][A-Z][a-z][a-z]
[0-9][A-Z][A-Z][A-Z][a-z][A-Z][A-Z][a-z][A-Z][a-z][0-9][0-9][a-z][a-z][a-z][a-z]
[0-9][a-z][0-9][A-Z][0-9][A-Z][A-Z][a-z][a-z][a-z][A-Z][A-Z][a-z][a-z][A-Z][a-z]
[0-9][A-Z][a-z][a-z][A-Z][A-Z][0-9][A-Z][A-Z][0-9][a-z][A-Z][a-z][A-Z][a-z][a-z]

Теперь я хочу удалить из списка слов «base.txt» все слова, которые соответствуют это регулярное выражение. Они также могут быть длиннее 16 символов! Я использую следующую команду:

LC_ALL=C grep -F -f generic.txt base.txt > test.txt

К сожалению, я не получаю результатов, но также и сообщений об ошибках. Что я делаю не так? В основном я хочу, чтобы grep проверял файл «base.txt» для каждой строки из файла «generi c .txt» и извлекал эти строки в новый файл.

Следующий список должен оставаться в конце :

Ford
Opel
Audi
BMW
Alfa-Romeo
Mercedes
Pegout-323
Lada 2109
Lada 2106
Toyouta
mitsubisi
jeep

TIA Sergio

Ответы [ 2 ]

0 голосов
/ 10 июля 2020

Непосредственная ошибка заключается в том, что опция -F полностью отключает регулярные выражения и требует, чтобы текст буквально соответствовал шаблону. (Так, например, [0-9] соответствует буквальной строке [0-9] и никаким другим строкам.)

Вероятно, лучший подход - попытаться обобщить этот абсурдный список шаблонов до одного шаблона или очень маленького список шаблонов. Как вы пришли к этому списку?

Например,

grep -E '^[A-Za-z0-9]{16}$' base.txt

, кажется, извлекает только (очевидные) сгенерированные шаблоны в вашем примере.

0 голосов
/ 10 июля 2020

Проблема заключается в определении «слова», означающем, почему Ford должно быть допустимым словом, а, например, F0rd - нет? Тем не менее, для вашего данного списка вы можете использовать

^[a-zA-Z]+(?:[- ]\w+)?$

См. демонстрацию на regex101.com .


Другое решение было бы чтобы подчеркнуть, что слово не может начинаться с di git, поэтому все, что начинается с di git, не содержит допустимых слов:
^[0-9].{15}$(*SKIP)(*FAIL)|^.+

См. другую демонстрацию этого на regex101 .com .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...