如何让grep只打印匹配的文本加上X个周围的字符

Cap*_*ack 14 grep

我需要类似于grep -Aand grep -Bbut 字符的东西。换句话说,我有一个非常长的文件,例如:

[thousands of characters] mytext [thousands of characters]
Run Code Online (Sandbox Code Playgroud)

如果我这样做grep mytext file,我不想要完整的行,因为如果我将它输出到文件中,它会变得太难阅读并导致一个巨大的文件。grep -o对我不起作用,因为它只返回mytext并且我需要在匹配项周围看到 X 个字符。所以想象一个假选项-Y

$ grep -Y mytext file
Pz8mytextgxe
sd@mytext.com
Run Code Online (Sandbox Code Playgroud)

我该怎么做呢?

Jor*_*els 12

如果你预先知道 Y,那么你可以做例如

grep -o '...mytext...' file
Run Code Online (Sandbox Code Playgroud)

其中...是 Y 个字符长。例如,上面对 Y=3 来说是这样。这 '。' 正则表达式中的字符匹配任何字符。

  • `Y=2; grep -oP ".{$Y}mytext.{$Y}" 文件` (5认同)
  • 此解决方案可能无法捕获自 '.' 之后出现的所有事件。字符与行的开头或结尾不匹配。 (5认同)
  • 是的。有些平台没有`-P`,所以你可以使用`-E`。 (3认同)
  • @carla 请参阅 Gabriel Staples 的回答。{0,$Y} 将赶上最多 Y 个字符。 (3认同)