这两个正则表达式为什么结果一样?

grep -v "^[[:space:]]*#" 这句是匹配不包含空格制表符开头的行

awk 'BEGIN{FS=":"}{if($1~/^[[:space:]]*[^#]/) print $1}'

这句awk 匹配的也是不包含空格制表符开头的行 打印了变量1

grep -v 是取反

awk 中 ~ 是正向匹配

这是为什么??

正则表达式的* 表示其前置字符出现0次或多次
grep -v "^[[:space:]]*#" 的意思就成了 不包含#
awk 'BEGIN{FS=":"}{if($1~/^[[:space:]]*[^#]/) print $1}' 也是不包含#

看你的意思可能是要:grep -v "^[[:space:]].*#" 不以空制表符开头且不包含#