用grep匹配一个句子

时间:2015-07-02 01:19:12

标签: regex grep

我正在尝试grep包含搜索词的完整句子。我试过了

grep (^.|\.\s).*searchterm.*(\.\s|\n)

但它没有用,我不知道为什么。

澄清:我希望stdout打印搜索词的完整句子。我正在使用grep搜索单个文本文件。

例如,如果我的文件有

Foo blah. Blah blah searchterm blah blah. Foo bar."

我希望stdout打印Blah blah searchterm blah blah

2 个答案:

答案 0 :(得分:0)

因为普通grep使用BRE,您必须将捕获组写为\(...\),并将替换运算符写为\|。仅()|会匹配相应的文字()|字符。

grep '\(^.\|\.\s\).*searchterm.*\(\.\s\|\n\)'

grep '\(^.\|\.[[:space:]]\).*searchterm.*\(\.[[:space:]]\|\n\)'

启用-E-P参数。

grep -P '(^.|\.\s).*searchterm.*(\.\s|\n)'

答案 1 :(得分:0)

使用gnu-sed,这将删除包含searchterm的句子之前和之后的任何内容:

sed -n -r '/searchterm/ s/^|(.*\. (.*))(searchterm[^.]*\.).*/\2\3/ ; s/\..*/\./p'