如何使用 grep 查找具有部分周围上下文的单词?

如何使用 grep 查找具有部分周围上下文的单词?

我想使用 grep 来确定在搜索内容之前和之后应显示多少个字符。例如,我想从“这是一个示例”行中过滤“示例”。通过使用grep example结果将是包含该字符串的所有行,而我希望获得的只是“一个例子",该词之前的两个字符例子

答案1

有 grep 选项

grep -Eo '...example' test.txt

在哪里

  • -E使用扩展正则表达式
  • -o只输出匹配的字符串
  • ...表示任意 3 个字符
  • 两个选项可以合并为-Eo
  • ' ' 括起模式以避免 shell 替换

按照建议,替代 3 个或更少字符

grep -Eo '.{,3}example' test.txt

其中x{a,b}代表 x 出现在 a 和 b 之间

  • .{,3}最多 3 个任意字符
  • X{2,10}2 到 10 个连续的 X(大写 X)
  • [xy]{5}x 或 y 中的恰好 5 个

关于 shell 替换的注释

grep -Eo ???example file

123example如果运行 grep 的目录中存在类似的文件,则可能无法按预期工作。

答案2

您可以将输出从 grep 传送到 sed。这是一个例子:

grep example test.txt | sed 's/.*\(...example\)/\1/'

有关 sed 教程,请参阅http://www.grymoire.com/Unix/Sed.html

相关内容