【问题标题】:How to choose the right words in regular expressions?如何在正则表达式中选择正确的词?
【发布时间】:2021-09-10 10:59:33
【问题描述】:

如何使用 grep 获取不包含 3 和 7 的数字,而不是字符串!

我试试

 grep -o '[[:digit:]^37]*' test

但它不起作用

【问题讨论】:

  • 您能否为这些行添加几行示例输入和准确的预期输出?还要尝试更详细地解释您希望该命令执行的操作。
  • 这对\b[01245689]+\b有帮助吗?
  • @Sundeep,原文hello, world nan hello,68 world a2e sad f 123 345 456 678 dtdfstgvc5 23 ds3回答68 456
  • @AKSingh,我不必列出所有允许的数字,因为任务可以转移到字母
  • @Shrek1995。请编辑问题以提及您希望输出的方式。我提供的正则表达式返回68 and 456。那有什么问题呢?

标签: regex grep


【解决方案1】:

如果你有 GNU grep,你可以使用

grep -oP '\b[^\D37]+\b' file

grep -oP '\b[^[:^digit:]37]+\b' 是同义命令。 详情

  • \b - 单词边界(如果您只是想确保左边没有其他数字,可以替换为 (?<!\d)
  • [^ - 否定括号表达式的开头,它匹配以下字符:
    • \D - 任何非数字字符
    • 37 - 37
  • ]+ - 括号表达式结束,重复一次或多次
  • \b - 单词边界(如果您只是想确保右边没有其他数字,可以替换为 (?!\d))。

online demo

s='123 456 857 112 i21.'
grep -oP '\b[^\D37]+\b' <<< "$s"

输出:

456
112

要对字母使用相同的方法,请将\D 替换为\P{L} 或将[:^digit:] 替换为[:^alpha:]

【讨论】:

    猜你喜欢
    • 2015-12-13
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 2021-01-21
    • 2016-01-11
    • 2022-08-18
    • 2011-06-18
    • 1970-01-01
    相关资源
    最近更新 更多