Regex 使用数学和grep

Regex 使用数学和grep,regex,grep,Regex,Grep,我需要找到文件中无效电子邮件地址的数量,基本上是任何包含@但格式不正确的行。 我用这个来计算有效电子邮件地址的数量: grep -Ei '[A-Z0-9.-]+@[A-Z0-9.-]+\.[A-Z]{3}' $1 | wc -l 这是用来计算有多少行包含@: grep -E '@' $1 | wc -l 在使用wc-l打印之前,是否有一种方法可以减去包含@anywhere的行数和有效电子邮件数?grep有-c选项仅打印事件,您应该利用它,而不是生成另一个进程和匿名管道: grep -c '

我需要找到文件中无效电子邮件地址的数量,基本上是任何包含@但格式不正确的行。 我用这个来计算有效电子邮件地址的数量:

 grep -Ei '[A-Z0-9.-]+@[A-Z0-9.-]+\.[A-Z]{3}' $1 | wc -l
这是用来计算有多少行包含@:

grep -E '@' $1 | wc -l
在使用wc-l打印之前,是否有一种方法可以减去包含@anywhere的行数和有效电子邮件数?

grep有-c选项仅打印事件,您应该利用它,而不是生成另一个进程和匿名管道:

grep -c '<pattern>' file.txt
要从两次搜索中减去计数,可以使用命令替换直接减去它们:

echo $(( $(grep -c '<pattern_1>' file.txt) - $(grep -c '<pattern_2>' file.txt) ))
如果您愿意,还可以使用两个变量:

count_1=$(grep -c '<pattern_1>' file.txt)
count_2=$(grep -c '<pattern_2>' file.txt)
echo $(( count_1 - count_2 ))