我希望在一个巨大的数据库转储中进行查找和替换,但它没有做我认为应该发生的事情。我想在文件中 grep 查找我的目标字符串,然后查看周围的 8 个字符左右(我可能需要调整该数字,具体取决于)。我怎样才能做到这一点?
我之所以无法关注这一点,是因为有数百甚至数千场比赛。我想获取字符串周围的一些字符,然后将其通过管道传输到uniq
其他地方,以了解为什么我的查找和替换会出现意外行为。
此外,同一行上可以有多个匹配项!
答案1
粗略的使用方式grep
是这样的
grep -o "....yourtext...." /path/to/the/dump.sql
点数对应于 grep 文本之前/之后的字符数。该-o
选项使grep
输出仅匹配,而不是整行。
要uniq
在输出上使用,请记住您必须首先对输出进行排序。所以通常情况下,你会这样做
grep . . . | sort | uniq
如果您对每场比赛的命中数感兴趣,您可以使用以下命令获得不错的输出
grep . . . | sort | uniq -c | sort -n
答案2
从@rozcietrzewiacz的回答开始,我可以扩展到
pattern="string"
num=8
grep -on ".\{0,$num\}$pattern.\{0,$num\}" input-file