我想使用 grep 来确定在搜索内容之前和之后应该显示多少个字符。例如,我想从“这是一个示例”行中过滤“示例”。通过使用grep example
结果将是包含字符串的所有行,当我希望获得的只是“一个示例”,单词example之前的两个字符。
Arc*_*mar 13
有 grep 选项
grep -Eo '...example' test.txt
Run Code Online (Sandbox Code Playgroud)
在哪里
-E
使用扩展正则表达式-o
只输出匹配的字符串...
表示任意 3 个字符-Eo
正如建议的那样,3 个或更少字符的替代品
grep -Eo '.{,3}example' test.txt
Run Code Online (Sandbox Code Playgroud)
其中x{a,b}
代表在 a 和 b 之间出现 x
.{,3}
最多 3 个任意字符X{2,10}
从 2 到 10 个连续的 X(大写 X)[xy]{5}
正好是 x 或 y 中的 5 个关于外壳替换的说明
grep -Eo ???example file
Run Code Online (Sandbox Code Playgroud)
如果123example
运行 grep 的目录中存在类似文件,则可能无法按预期工作。
小智 5
您可以将输出从 grep 传送到 sed。下面是一个例子:
grep example test.txt | sed 's/.*\(...example\)/\1/'
Run Code Online (Sandbox Code Playgroud)
有关 sed 教程,请参阅http://www.grymoire.com/Unix/Sed.html