对于大学课程,我们有一个类似
的文件Word Word Word
Word Word
Text Word
Word Worden Word Word someothertext
我们的任务是使用一个基本的MacOS终端来查找文件中行的开头存在字符串“Word”并且不超过两次的那些行,然后(最好是在同一步骤中)计算那些线。
我的猜测是
grep "^Word" filename.txt | grep -c "(Word){1,2}"
但它让我无处可去,因为第二个grep的模式不会过滤任何东西。
我正在慢慢忘记这个问题,所以我希望这里的任何人都可以提供帮助,谢谢!
答案 0 :(得分:0)
这样的事情有效。 ^(Word)(?:(?!\1).)*\1?(?:(?!\1).)*$
https://regex101.com/r/xdoxoi/1
至于计算线,那不是正则表达式。
阅读版本
^ # BOS
( Word ) # (1)
(?: # Cluster, optional
(?! \1 ) # Any char doesn't start a 'Word'
.
)*
\1? # Optional 'Word'
(?: # Cluster, optional
(?! \1 ) # Any char doesn't start a 'Word'
.
)* # Any non-'Word'
$ # EOS
答案 1 :(得分:0)
不是专家,但尝试了一些有效的方法,可能是一种过度杀伤力:
grep '^bhavya' sample.txt | while read -r line; do
x="$( echo $line | grep -o 'bhavya' | wc -l )"
z="$(echo $x)"
if [[ "$z" == "2" ]]; then
echo $line
fi
done
答案 2 :(得分:0)
首先丢弃带有三个单词的行,剩下的任务很简单。
sed -nr '/(Word).*(\1).*(\1)/d; /^(Word)/p' filename.txt | wc -l
或
grep -Ev '(Word).*(\1).*(\1)' filename.txt | grep -c "^Word"
of(当你不喜欢反向引用时)
grep -Ev 'Word.*Word.*Word' filename.txt| grep -c "^Word"