【问题标题】:Remove artificially generated words from a word list in Linux?从Linux中的单词列表中删除人工生成的单词?
【发布时间】:2020-07-10 08:14:39
【问题描述】:

大家好,美好的一天! 我有以下问题:我有一个单词列表,其中包含正常单词和人工生成的单词。

示例:

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 并将它们保存在一个新文件“Generic.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检查文件“generic.txt”中每一行的文件“base.txt”并将这些行提取到一个新文件中。

以下列表应保留在末尾:

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

TIA 塞尔吉奥

【问题讨论】:

  • 严重拼错的汽车品牌是机器生成文本的例子,还是相反?
  • 所有明显是机器生成的token都以0开头,长度固定;这还不足以排除他们吗? grep -Ev '^0[A-Za-z0-9]{15}$' base.txt(或者可能删除最初的 0 并将重复计数从 15 更改为 16 以捕获所有不带空格或标点符号且长度正好为 16 个字符的字符串)。
  • 我需要严格定义正则表达式行的解决方案。有些行还包含 [a-z] 或 [A-Z] 作为开始。或者机器生成的文本超过 15 个字符... :-(
  • "grep -v -E -f generic.txt base.txt > new.txt" 有效!!!

标签: regex linux ubuntu grep generic-list


【解决方案1】:

直接错误是-F 选项完全禁用正则表达式,并要求文本与模式字面匹配。 (例如,[0-9] 匹配文字字符串 [0-9] 而没有其他字符串。)

可能更好的方法是尝试将这个荒谬的模式列表概括为单个模式或非常小的模式列表。您是如何得出这份清单的?

例如

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

似乎只提取了您的示例中(明显)生成的模式。

【讨论】:

  • 如果你想要 16 个或更多,将 {16} 更改为 {16,} 或者更详细地指定哪些字符串长度是有趣的(我猜可能是 16、20、24... 或者也许8 或 16 的倍数?)
  • 谢谢!这对我有帮助。 -F 和正则表达式问题...我不知道。 :-)
  • 但是你为什么要指定-F 选项呢?
  • 这不是我需要的解决方案,但我现在有了更多想法。从列表中搜索多个单词的相同命令是 grep -F -f 1.txt 或 grep -i 'abc|abcd|abcde|abcdef
  • 不,grep -f filename 是从文件中读取模式的语法,不相关的-F 选项从正则表达式模式切换到文字字符串(又名繁体fgrep;类似地-E 切换到egrep 语义)。也许您还想查看-x,它需要整个输入行(而不是子字符串)来匹配(其中一个)模式。
【解决方案2】:

问题是“单词”的定义,这意味着为什么Ford 应该是一个有效的单词,而例如F0rd 不是吗?也就是说,对于您给定的列表,您可以使用

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

a demo on regex101.com


另一种解决方案是强调单词不能以数字开头,因此以数字开头的任何内容都不包含有效单词:
^[0-9].{15}$(*SKIP)(*FAIL)|^.+

another demo for this one on regex101.com

【讨论】:

  • 您好 Jan,不幸的是,这不是我想要的。我正在寻找如何从另一个列表中的一个列表(由正则表达式预定义)中删除所有行。
猜你喜欢
  • 1970-01-01
  • 2021-12-29
  • 2018-09-28
  • 2013-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多