我有一个命令的输出,我想通过管道传输到某种 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'
不过我认为应该有一些更好的解决方案。任何帮助,将不胜感激。
答案1
如果您不介意使用perl
:
mycommand | perl -lne 'print join "", /ban[a-z]*/g'
每行上的匹配项都会在列表上下文中返回,您可以使用空分隔符将其连接起来。