我如何 grep 多个模式,并将它们打印在同一行上?

我如何 grep 多个模式,并将它们打印在同一行上?

我有一堆文件,它们都遵循相同的数据模式。

假设这是我想要从中提取的模式:

First part of text...patternA......Second part of text.....patternB.....Third part of text....patternC.....End part of text

目前我正在使用这个:

grep -P -o ".{0,5}patternA|.{0,5}patternB.{0,5}|patternC.{0,5}" filename.txt

这样我得到的输出是:

1111 patternA
2222 patternB 2222
patternC 3333

我真正想要的输出是:

1111 patternA 2222 patternB 2222 patternC 3333

我似乎无法弄清楚如何摆脱每个模式末尾的换行符。

我怎样才能做到这一点?

答案1

如果您知道所有 3 个字段始终存在,您可以使用“粘贴”尝试以下操作

grep -P -o ".{0,5}patternA|.{0,5}patternB.{0,5}|patternC.{0,5}" filename.txt | paste - - -

答案2

用于sed使用捕获组将与模式匹配的行部分复制到输出。

sed -r -n 's/.*(.{0,5}patternA).*(.{0,5}patternB.{0,5}).*(patternC.{0,5}).*/\1 \2 \3/p' filename.txt

这假设线条上的图案始终按此顺序排列。

答案3

column

COLUMN(1)                 BSD General Commands Manual                COLUMN(1)

NAME
     column -- columnate lists

SYNOPSIS
     column [-tx] [-c columns] [-s sep] [file ...]

DESCRIPTION
     The column utility formats its input into multiple columns.  Rows are
     filled before columns.  Input is taken from file operands, or, by
     default, from the standard input.  Empty lines are ignored.

例如(通过免费无用的使用cat来证明您可以将grep的输出通过管道传输到column):

$ cat example
Fuzzy
wuzzy
was
a
bear
$ cat example | column
Fuzzy   wuzzy   was a   bear

相关内容