【发布时间】: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 -
我之前试过,它只是打印出所有的代码,甚至是有效的代码