Regex 在文件中搜索不超过两次出现的字符串
对于大学课程,我们有一个文件,其行如下Regex 在文件中搜索不超过两次出现的字符串,regex,bash,macos,unix,Regex,Bash,Macos,Unix,对于大学课程,我们有一个文件,其行如下 Word Word Word Word Word Text Word Word Worden Word Word someothertext 我们的任务是使用基本的MacOS终端只查找文件中字符串“Word”位于行首且不超过两次的行,然后(最好在同一步骤中)对这些行进行计数 我的猜测大致是这样的 grep "^Word" filename.txt | grep -c "(Word){1,2}" 但这对我毫无帮助,因为第二个grep的模式没有过滤任何东西
Word Word Word
Word Word
Text Word
Word Worden Word Word someothertext
我们的任务是使用基本的MacOS终端只查找文件中字符串“Word”位于行首且不超过两次的行,然后(最好在同一步骤中)对这些行进行计数
我的猜测大致是这样的
grep "^Word" filename.txt | grep -c "(Word){1,2}"
但这对我毫无帮助,因为第二个grep的模式没有过滤任何东西
我慢慢地对这个问题失去了理智,所以我希望这里的任何人都能帮助我,谢谢 像这样的方法很管用<代码>^(单词)(?:(?!\1)。*\1?(?:(?!\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
不是专家,但尝试了一些东西,效果很好,可能有点过头了:
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
首先丢弃三个单词的行,剩下的任务很简单
sed -nr '/(Word).*(\1).*(\1)/d; /^(Word)/p' filename.txt | wc -l
或
(当您不喜欢反向引用时)
这是你的任务。如果我们为你做,你什么也学不到。如果你有困难,复习你的课程笔记。如果这没有帮助,请向您的讲师寻求帮助-他们需要知道他们在哪里没有提供足够的内容。谢谢,但这条评论是否否定了这个平台的全部用途?这个问题不是脚本的一部分,也从未在我们的课上解决过,而且讲师也不合作。这些事情经常发生。请让人们生活,让学生学习,这里的很多人比我的教授解释得更好。再说一遍,这是你的作业。你的猜测似乎错了,所以试试别的吧。我们这里不做作业。如果你的导师不合作,向你的学校抱怨他们没有完成你的学费支付给他们的工作。这不是一个家庭作业完成或代码编写服务。其他人要求帮助解决他们的有偿工作问题,所以我真的不认为这里有问题。他们付钱让人教正则表达式?
grep -Ev '(Word).*(\1).*(\1)' filename.txt | grep -c "^Word"
grep -Ev 'Word.*Word.*Word' filename.txt| grep -c "^Word"