使用数学和grep

时间:2017-01-31 05:04:22

标签: regex grep

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

 grep -Ei '[A-Z0-9.-]+@[A-Z0-9.-]+\.[A-Z]{3}' $1 | wc -l

并计算包含@:

的行数
grep -E '@' $1 | wc -l

有没有办法可以在用wc -l打印之前减去包含@的行数以及有效电子邮件的数量?

1 个答案:

答案 0 :(得分:1)

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 ))