使用grep验证少于10个单词的句子(必须以双引号开头,然后以大写字母开头,以点结尾,再以双引号结束)
到目前为止,这是我的代码:
echo -e "\"This is a sentence.\""| grep -E '"[[:upper:]][[:upper:][:lower:] ]{1,10}\."'
问题是:它似乎计算字母而不是字数。我想知道是否有任何方法可以将这些词语限制在10个。
您的任何意见都受到高度重视。
答案 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}\."$'
$