我想使用 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