複数のパターンを把握して同じ行に印刷するにはどうすればよいですか?

複数のパターンを把握して同じ行に印刷するにはどうすればよいですか?

複数のファイルがあり、すべて同じデータパターンに従います。

これが私が抽出したいパターンであるとしましょう。

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デモンストレーション):grepcolumn

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

関連情報