![如何计算具有一定长度的标题大小写单词的行数?](https://linux22.com/image/1239/%E5%A6%82%E4%BD%95%E8%AE%A1%E7%AE%97%E5%85%B7%E6%9C%89%E4%B8%80%E5%AE%9A%E9%95%BF%E5%BA%A6%E7%9A%84%E6%A0%87%E9%A2%98%E5%A4%A7%E5%B0%8F%E5%86%99%E5%8D%95%E8%AF%8D%E7%9A%84%E8%A1%8C%E6%95%B0%EF%BC%9F.png)
如何在 unix/linux 中创建 shell 脚本来查找文本文件中包含 5 到 10 个字符长且以大写字母开头的单词的行数?
答案1
假设原来的问题是为了数数符合上述要求的行数,那么应该这样做:
grep -e '\<[[:upper:]][[:alpha:]]\{4,9\}\>' file|wc -l
假设这意味着打印匹配的行号:
awk --re-interval '{line = line + 1} /\<[[:upper:]][[:alpha:]]{4,9}\>/ {print line}' file
答案2
egrep "^[A-Z]" FILE | egrep -c "\b[A-Za-z]{5,10}\b"
现在的问题是,过滤掉以大写字母开头的行(就像这一行)[该行必须以大写字母开头 - 而不是单词],并包含一个单词(不一定是第一个单词) ),长度为 5 到 10 个字符。
是的,读完原题后,有 4 种可能的解释: 起始词必须满足两个要求,或者它是起始词和另一个词,以及: 获取行号,或行数。
要打印以大写字母开头并包含长度为 5-10 的单词的行的行号,我们使用 sed:
sed -nr '/^[A-Z][a-z]{4,9}/=;/^[A-Z].*\b[A-Za-z]{5,10}\b/=' FILE