【问题标题】:Grep regex isn't fully matching invalid hexadecimal color codesGrep 正则表达式不完全匹配无效的十六进制颜色代码
【发布时间】:2020-04-21 10:18:33
【问题描述】:

所以我有一个包含有效和无效十六进制颜色代码的文本文件。我希望能够过滤掉无效代码并只打印有效代码。要使代码有效,它必须有一个哈希符号,在哈希之后的长度为 6 或 8 个字符,并且字符必须是 a-f 或 0-9。我下面的 grep 命令存储在 makefile 中,但这似乎不是我的正则表达式无法正常工作的原因,因为它正在摆脱少于 6 个字符的代码,而不是 7 个或更多字符的代码8 个字符长或包含非 a-f 字母的代码。出于测试目的,我使用 -v 只是为了打印出无效代码,因为我想查看哪些代码匹配,哪些不匹配。

grep -vE '^#([a-f0-9]{6})|([a-f0-9]{8})$$' colours.txt

代码:

#b293a6
#ead58f
#31511bxf
#a69d36a2
#067806
#afe6e
#7f0bf7ef
#dd85
#042847421
#1a283af

想要的输出:

#b293a6
#ead58f
#a69d36a2
#067806
#7f0bf7ef

我目前得到的输出:

#afe6e
#dd85

更新的输出:

sean@sean-VirtualBox:~/Desktop$ head colours.txt | cat -A
#b293a6^M$
#ead58f^M$
#a69d36a2^M$
#067806^M$
#7f0bf7ef^M$
#f8b366^M$
#042847421^M$
#8946d7^M$
#c927d4^M$
#3e568bff^M$

【问题讨论】:

  • 你的意思是^#([a-f0-9]{6}|[a-f0-9]{8})$ 有一个单独的组和交替? regex101.com/r/GD2sEJ/1
  • 我之前试过,它只是打印出所有的代码,甚至是有效的代码

标签: regex unix grep


【解决方案1】:

您的交替模式不正确。 ^#([a-f0-9]{6})|([a-f0-9]{8})$$ 表示 ^#[a-f0-9]{6}[a-f0-9]{8})$ 由于括号放错位置。

你可以使用这个grep:

grep -ivE '^#[a-f0-9]{6}([a-f0-9]{2})?$' file

#31511bxf
#afe6e
#dd85
#042847421
#1a283af

【讨论】:

    猜你喜欢
    • 2016-12-03
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 2023-03-28
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    相关资源
    最近更新 更多