regex - 如何打印仅包含 BASH 列表中字符的行?

标签 regex bash grep

我有一个名为“dictionary.txt”的文件,其中包含所有可能单词的列表,例如:

a
aardvark
act
anvil
ate
...

我如何搜索这个,只打印包含有限列表中字母的行,例如,如果列表包含字母“c”、“a”和“t”,搜索将显示这些词:

a
act
cat

如果搜索字母“e”、“a”和“t”,则只能从“dictionary.txt”中找到这些词:

a
ate
eat
tea

我管理的唯一解决方案是:

  • 创建所有可能字母的列表。
  • 从这个列表中删除搜索到的字母,留下一个我不想搜索的字母列表。
  • 使用 for 循环循环每个字母,从字典中删除包含这些字母的所有行。
  • 打印字典中剩余的单词。

这个解决方案非常慢。另外,我需要将此代码与其他语言一起使用,这些语言有数千种可能的字符,因此这种搜索方法特别慢。

我怎样才能只打印“dictionary.txt”中只包含搜索字母的那些行,而没有其他内容?

最佳答案

grep '^[eat]*$' dictionary.txt

解释:

^ = 表示行首的标记

$ = 表示行尾的标记

[abc] = 字符类(“匹配这些字符中的任何一个”)

* = 字符类的乘数(零次或多次重复)

关于regex - 如何打印仅包含 BASH 列表中字符的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23740463/

相关文章:

Python 正则表达式循环跳过每三个项目

JavaScript : RegExp pattern not picking up as valid Regular Expression

bash - 从shell脚本中的文件名中删除一级文件扩展名

linux - 用grep检查两个数组的确切顺序

json - 使用 grep 提取两个单词之间的文本

awk - 如何使用 grep/awk/sed 打印特定模式(不包括模式本身)之前的所有字符?

javascript - 我的 URL 正则表达式允许空格但不应该

javascript - 用 span 包裹每个字符,但保持 HTML 格式

linux - 为什么我在 shell 中读取 fifo 时出错?

linux - bash:如何将文件 `cat` 之后的所有变量名替换为它们的值?