使用grep检查句子是否少于10个单词

时间:2014-11-25 14:41:39

标签: count grep words

使用grep验证少于10个单词的句子(必须以双引号开头,然后以大写字母开头,以点结尾,再以双引号结束)

到目前为止,这是我的代码:

echo -e "\"This is a sentence.\""| grep -E '"[[:upper:]][[:upper:][:lower:] ]{1,10}\."'

问题是:它似乎计算字母而不是字数。我想知道是否有任何方法可以将这些词语限制在10个。

您的任何意见都受到高度重视。

3 个答案:

答案 0 :(得分:3)

为什么要使用grep?

$ echo "This is a sentence" | wc -w
4

wc - 字数。

答案 1 :(得分:0)

考虑到你必须使用grep并对句子的结构有约束,试试

grep -E '"([[:upper:]]\w+)(\s\w+){0,9}\."'

它匹配至少一个单词,以大写字母开头,最多10个单词,所有句子以点结尾并用引号括起来。

来自shell的输出示例:

$ echo -e "\"This.\""| grep -E '"([[:upper:]]\w+)(\s\w+){0,9}\."'
"This."


$ echo -e "\"This is a sentence with exactly ten words you see.\""| grep -E '"([[:upper:]]\w+)(\s\w+){0,9}\."'
"This is a sentence with exactly ten words you see."



$ echo -e "\"This is a sentence with more than ten words you see.\""| grep -E '"([[:upper:]]\w+)(\s\w+){0,9}\."'

答案 2 :(得分:0)

下面的grep将打印少于10个单词的字符串,从1到9。

$ echo -e "\"This is a sentence.\"" | grep -P '^"[A-Z]\w*(\s+\w+){0,8}\."$'
"This is a sentence."
$ echo -e "\"This is a sentence foo bar fgb bghj ngh.\"" | grep -P '^"[A-Z]\w*(\s+\w+){0,8}\."$'
"This is a sentence foo bar fgb bghj ngh."
$ echo -e "\"This is a sentence foo bar fgb bghj ngh nar.\"" | grep -P '^"[A-Z]\w*(\s+\w+){0,8}\."$'
$