我正在尝试grep包含搜索词的完整句子。我试过了
grep (^.|\.\s).*searchterm.*(\.\s|\n)
但它没有用,我不知道为什么。
澄清:我希望stdout打印搜索词的完整句子。我正在使用grep搜索单个文本文件。
例如,如果我的文件有
“Foo blah. Blah blah searchterm blah blah. Foo bar."
我希望stdout打印Blah blah searchterm blah blah
答案 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'