我有一个命令的输出,我想通过管道传递给某种 grep 命令,以获取每行中与给定正则表达式匹配的部分,并且只输出匹配的部分,而不引入换行符
我知道grep -o
可以做一些非常相似的事情,但它会为每个匹配生成一个换行符,并且我的命令的输出也包含许多新行。
例子:
输入(我的命令的输出):
banana apple banana
apple bananas banned
正则表达式:
ban[a-z]*
输出grep -o
:
banana
banana
bananas
banned
预期输出:
bananabanana
bananasbanned
我能想到的一件事是使用tr
将换行符替换为一些不太可能出现在命令输出中的字符,将输出提供给grep -o
,然后用于tr
取回换行符。
mycommand|tr '\n' @|grep -o regex|tr -d '\n'|tr @ '\n'
但是我想应该有一些更好的解决方案。任何帮助,将不胜感激。
如果您不介意使用
perl
:每行上的匹配项在列表上下文中返回,您可以使用空分隔符将其连接起来。