使用bash提取包含特定动词时态不同的句子

时间:2019-01-20 20:07:58

标签: regex bash

我想从一本书中摘录包含动词及其不同时态列表的句子。

例如,对于单词embellish,我希望我的程序不仅能够识别embellish,而且还能够识别embellishingembellishesembellished 。这是我在bash中所做的事情:

word="embelish"
echo "It was embellished ..." | grep -E "${word}""ed"

这可以轻松识别句子It was embellished ...。我想在bash中使用类似以下命令的替代方法来识别不同的时态:

echo "It was embellished ..." | grep -E '"${word}""ed"|"${word}""es"'

但是该命令无法识别该句子。我尝试了不同的替代方案组合,但没有成功。

您能否建议在正则表达式中使用替代方式,以便我可以在一个命令中检测到不同的时态?

谢谢!

1 个答案:

答案 0 :(得分:1)

您需要从grep参数中删除所有双引号,然后将其替换为双引号。那是因为变量不能用单引号引起来。实际上,单引号之间的所有内容均按字面意义使用。因此,当你写

echo "It was embellished ..." | grep -E '"${word}""ed"|"${word}""es"'

您要搜索文字字符串

"${word}""ed"|"${word}""es"

相反,如果您写

echo "It was embellished ..." | grep -E "${word}ed|${word}es"

变量word被展开,并且您正在搜索embellishedembellishes

顺便说一句:您可以通过将结尾的edes等分组在一起来节省键入内容。

echo "It was embellished ..." | grep -E "$word(ed|es|ing)"