将 grep 输出保持在一行上?

将 grep 输出保持在一行上?

我有一个简短的问题想问你们。在浏览了文档和这里的网站后,我想知道是否有可能阻止 grep 在同一行输出每个匹配项。

在我的例子中,我需要采用等格式的字符串\xeb\x1a\x5e\x31\xc0\x88\x46\x07...。我用它grep -oP "x\K(\S\S)")来获取每个十六进制数字。

输出是正确的,但是每个匹配项都在自己的行上。这是一个问题,因为我需要将此输出输入到另一个程序中。那么,有没有办法将每个匹配项连续放置而不使用任何类型的填充?

答案1

您可以将输出传输到tr,例如

grep -oP "x\K(\S\S)") | tr -d '\n'

这需要额外的进程,也就是说,它会使你的程序变慢。如果这是一个问题,你可以使用sedawk

答案2

如果您将其输入以sed删除所有换行符(\n),它会起作用吗?

echo \xeb\x1a\x5e\x31\xc0\x88\x46\x07 | grep -oP "x\K(\S\S)" | sed ':a;N;$!ba;s/\n//g'

参考:如何使用 sed 替换换行符 (\n)?

相关内容