grep 匹配匹配的字符

use*_*394 9 grep string text-processing

我希望在一个巨大的数据库转储中进行查找和替换,但它没有做我认为应该发生的事情。我想对文件中的目标字符串进行 grep,然后查看周围的 8 个字符左右(我可能需要调整该数字,具体取决于)。我怎样才能做到这一点?

我之所以无法关注这一点,是因为有数百个甚至数千个匹配项。我想在字符串周围获取一些字符,然后将其输入uniq或其他东西以查看为什么我的查找和替换有意外行为。

此外,同一行上可以有多个匹配项!

roz*_*acz 14

粗略的使用grep方式是这样的

grep -o "....yourtext...." /path/to/the/dump.sql
Run Code Online (Sandbox Code Playgroud)

点数对应于 grepped 文本之前/之后的字符数。该-o选项grep仅输出匹配项,而不是整行。

uniq在输出上使用,请记住您必须先对输出进行排序。所以通常情况下,你会这样做

grep . . . | sort | uniq
Run Code Online (Sandbox Code Playgroud)

如果您对每场比赛的命中数感兴趣,您可以使用

grep . . . | sort | uniq -c | sort -n
Run Code Online (Sandbox Code Playgroud)


enz*_*tib 7

从@rozcietrzewiacz的回答开始,我可以扩展到

pattern="string"
num=8
grep -on ".\{0,$num\}$pattern.\{0,$num\}" input-file
Run Code Online (Sandbox Code Playgroud)

  • PS..我只是注意到当第一个模式的尾随“额外”文本的范围与前导“额外”文本的范围重叠时,它不会在同一行上捕获多个模式实例(如OP所述)下一个模式 (2认同)