Bash正则表达式在句子中找到特定的单词

时间:2012-07-10 18:47:46

标签: regex string bash scripting

我有这样一句话:

"The dog jumped over the moon because he likes jumping"

我希望找到与jump.*匹配的所有字词,即jumpedjumping。我怎么能这样做?

目前我在变量$sentence中有句子。我知道我要测试的匹配词,例如$testjump

谢谢

4 个答案:

答案 0 :(得分:3)

无管Bash解决方案

如果您想纯粹在Bash中执行此操作,则可以使用正则表达式匹配运算符和内置 BASH_REMATCH 变量来保存结果。例如:

re='\bjump[[:alpha:]]*\b'
string="The dog jumped over the moon because he likes jumping"
for word in $string; do
    [[ "$word" =~ $re ]] && echo "${BASH_REMATCH}"
done

根据您的语料库,这会正确返回以下结果:

jumped
jumping

答案 1 :(得分:2)

http://www.linuxjournal.com/content/bash-regular-expressions

看起来可能会对你有所帮助。 (我不擅长正则表达式或bash,对不起)

答案 2 :(得分:2)

试试这个正则表达式:

/\bjump.*?\b/

here\b匹配字边界,jump.*?之间的所有内容都以jump开头。

在bash中,您可以将它与grep:

一起使用
echo $sentence | grep -oP "\b$test.*?\b"

答案 3 :(得分:2)

echo $sentence | tr ' ' '\n' | grep "^$test"

更彻底:

echo $sentence | tr '[[:space:]]' '\n' | grep "^$test"