用这个:
grep -A1 -B1 "test_pattern" file
将在文件中匹配的模式前后产生一行。是否有一种方法不显示行,而是显示指定数量的字符?
我的文件中的行相当大,所以我对打印整行不感兴趣,而只是在上下文中观察匹配。有什么建议吗?
用这个:
grep -A1 -B1 "test_pattern" file
将在文件中匹配的模式前后产生一行。是否有一种方法不显示行,而是显示指定数量的字符?
我的文件中的行相当大,所以我对打印整行不感兴趣,而只是在上下文中观察匹配。有什么建议吗?
当前回答
前3个字符,后4个字符
$> echo "some123_string_and_another" | grep -o -P '.{0,3}string.{0,4}'
23_string_and
其他回答
我个人做的事情类似于张贴的答案。但由于点键,像任何键盘键,可以点击或按住..我通常不需要很多上下文(如果我需要更多,我可能会像grep -C一样做行,但经常像你一样,我不希望之前和之后的行),所以我发现它更快地输入命令,只需点击点键有多少个点/多少个字符,如果它是几个,然后点击键,或按住它更多。
例如echo zzzabczzzz | grep -o '.abc…'
会有abc模式,前后有一个点。(在正则表达式语言中,Dot匹配任何字符)。其他人也使用点,但用花括号表示重复。
如果我想在(0或x)字符和恰好y字符之间进行严格的re,那么我会使用curlies..和-P,就像其他人做的那样。
有一个关于点是否匹配新行的设置,但如果它是一个关注/兴趣,你可以查看一下。
grep -E -o ".{0,5}test_pattern.{0,5}" test.txt
这将匹配最多5个字符前后你的模式。-o开关告诉grep只显示匹配项,-E则告诉grep使用扩展正则表达式。请确保在表达式周围加上引号,否则它可能会被shell解释。
你的意思是这样的:
grep -o '.\{0,20\}test_pattern.\{0,20\}' file
?
这将在test_pattern的两侧打印最多20个字符。\{0,20\}符号类似于*,但指定了0到20次重复,而不是0或更多。-o表示只显示匹配本身,而不是整行。
如果使用ripgreg,你会这样做:
grep -E -o ".{0,5}test_pattern.{0,5}" test.txt
您可以使用regexp grep来查找+第二个grep来突出显示
echo "some123_string_and_another" | grep -o -P '.{0,3}string.{0,4}' | grep string
23 _string_and