所以我有一个包含有效和无效的十六进制颜色代码的文本文件。我希望能够过滤掉无效代码并仅打印有效代码。为了使代码有效,它必须有一个散列符号,散列后的长度为 6 或 8 个字符,并且字母必须为 AF。下面的 grep 命令存储在 makefile 中,每次我尝试运行该文件时,它都会给出一个错误,您可以在下面看到。
命令:
grep -ivE '^#([a-f0-9]{6}|[a-f0-9]{8})$' colours.txt
错误:
/bin/sh: 1: Syntax error: Unterminated quoted string
Makefile:2: recipe for target 'run-task-1' failed
make: *** [run-task-1] Error 2
代码:
#b293a6
#ead58f
#a69d36a2
#067806
#afe6e
#7f0bf7ef
#dd85
#042847421
#1a283af
想要的输出:
#b293a6
#ead58f
#a69d36a2
#067806
#7f0bf7ef
答案1
grep -ivE '^#([a-f0-9]{6}|[a-f0-9]{8})$' colours.txt
为了使其成为make
传递给 的内容sh
,您需要防止make
识别$
为元字符并尝试替换make
变量。
只需使用$$
.